1 Study background

1.1 Goal of the study

This research project is based on the umbrella project “Pandemic Emergency in Social Perspective. Evidence from a large Web-survey research”, designed and organized by principal investigators Linda Lombi (Università Cattolica del Sacro Cuore, Milan) and Marco Terraneo (Università Bicocca-Milano).

The principal goal of the international cross-sectional study is to explore the predictors of depression within the European context of the Covid-19 pandemic, specifically during the lockdown and social distancing period of March-April 2020.

Our team has decided to primarily focus on the impact of modifiable behavioral/lifestyle factors, such as exercise, alcohol and tobacco consumption, but, also, the usage of social media as a source of information about the pandemic. Our intention is to create and validate a depression model that these literature-based predictors should predict. Furthermore, we intend to explore the indirect pathway between social media consumption and depression mediated by the level of Covid-19-related concern/anxiety.

Supplementary data for this project, such as the survey questionnaire, original dataset and other key documents are accessible in our Open Science Framework repository. The R Markdown code is also acessible on our GitHub repository.

1.2 Sampling

Given the rapidly-developing nature of the Covid-19 pandemic, the principal research team (Lombi & Terraneo) chose a convenience sample, recruited through Facebook national groups using a snowballing technique. The goal was to collect at least 1000 responses per country.

The data collection has been conducted between March-April 2020 in the following eight countries: Italy, France, Germany, Spain, United Kingdom, Sweden, Poland, Czech Republic and were conducted by the members of the respective national teams (please see the research protocol in the OSF repository.

This relatively non-random sampling is likely to result in a non-representative sample for the national populations. This is one of the limitations of this research and is reflected in the “data collection and sampling” part of the research protocol outlined by Linda Lombi and Marco Terraneo.

This approach, therefore, does not aim to compare country-samples, but, rather, to compare segments of the national samples, with a particular focus on the vulnerable social groups, determined by socio-demographic, lifestyle professional and living condition aspects.

1.3 Analysis plan

In order to comply with the principles of Open Science, we intend to split our analysis to two parts.

  1. Within the first part, we test the literature-derived hypotheses on the Czech sample (n=1484) of the international study and develop models. We also explore the dataset (here referred to as COV19_05_agroup.sav) inductively and consider the formulation of additional hypotheses for other predictors that might have been missed before the beginning of the study. To lower the chance of overfitting, we only consider the adding additional variables that have an empirical support based on our review of the existing literature. Towards the end of the first part of the project, we pre-register our hypotheses and other key research information (including this reproducible R code) at the OSF Registries. While some of the team members have briefly interacted with the international dataset, they have not been involved in the pre-registration and hypothesis forming process in order to reduce biases by separating the exploratory and confirmatory phases of the research.
  2. In the second we will access the international dataset, which will include data from all of the countries that gathered at least 1000 responses. We will conduct confirmatory analyses, testing our models on this international sample, from which we will exclude the Czech sub-sample.

1.4 Core hypotheses

Alternative Hypotheses Variable Literature
H1: Female gender is associated with higher levels of depression. q01 (Salk, Hyde, and Abramson 2017; Kowal et al. 2020; Wang, Pan, Wan, Tan, Xu, McIntyre, et al. 2020; Luo et al. 2020; González-Sanguino et al. 2020)
H2: Higher age is associated with lower levels of depression. q02 (Kowal et al. 2020; Shevlin et al. 2020; Taylor et al. 2008; Losada-Baltar et al. 2020; González-Sanguino et al. 2020; Carstensen 2006)
H3: People in a relationship experience lower levels of depression. q03 (Kowal et al. 2020; Jacob, Haro, and Koyanagi 2019)
H4: Parenthood is associated with significantly different levels of depression. q04 (Stanca 2012; Shevlin et al. 2020)
H5: Higher education is associated with lower levels of depression. q11 (Kowal et al. 2020; Gloster et al. 2020; Taylor et al. 2008)
H6: Use of social media is associated with higher levels of depression. q18_02 (Bendau et al. 2020; Dhir et al. 2018; Primack et al. 2017)
H7: Physical contact with friends and family is associated with lower levels of depression. q35_01, q35_03 (Gloster et al. 2020; Tull et al. 2020; Luo et al. 2020)
H8: Regular consumption of alcohol and tobacco is associated with higher levels of depression. q38, q40 (Stanton et al. 2020; Awaworyi Churchill and Farrell 2017)
H9: Regular workouts or physical activity are associated with lower levels of depression. q42 (Harvey et al. 2018; Schuch et al. 2016; Kvam et al. 2016; Krogh et al. 2017; Stubbs et al. 2018)
H10: Worse self-rated health quality is associated with higher levels of depression. q47, q48, q47 (Ambresin et al. 2014; Vindegaard and Benros 2020; Hossain et al. 2020)
H11: Adequate level of public information about Covid-19 transmission and precautionary measures to prevent its spread (hand washing and mask wearing) is associated with lower levels of depression. q20, 34_02, 34_07 (Wang, Pan, Wan, Tan, Xu, Ho, et al. 2020; Wang, Pan, Wan, Tan, Xu, McIntyre, et al. 2020)
H12: Economic distress is associated with higher levels of depression. q36 (Meltzer et al. 2009)
H13: In addition to H6, we hypothesize the existence of a causal pathway leading from social media exposure to depression, which is mediated by Covid-19 concern/anxiety and moderated by age and gender. q01, q02, q18_02, concern_index (Bendau et al. 2020; Rasmussen et al. 2020; Wheaton, Prikhidko, and Messner 2021; Vannucci, Flannery, and Ohannessian 2017; Mertens et al. 2020)

2 Analysis of the Czech sample

2.1 Loading the dataset, required R packages and data wrangling

The code below can be run in R or in R IDE, such as R Studio. We used R Markdown within the R Studio to compose this report and used the open-source jamovi software (a R GUI) to conduct some of the exploratory analyses that are then replicated here.

# The following packages might need to be installed onto your version 
# of R prior to the running of the code below.

# Package names
packages <- c("udpipe", "MASS", "lavaan", "processR", "wordcloud", "corrplot", "tidytext", "tidyverse", "haven", "jmv", "Hmisc")

# Install packages not yet installed
installed_packages <- packages %in% rownames(installed.packages())
if (any(installed_packages == FALSE)) {
  install.packages(packages[!installed_packages])
}

# Packages loading
invisible(lapply(packages, library, character.only = TRUE))

# We load the original Czech dataset (in SPSS format) from a local directory.
data <- zap_labels(haven::read_sav(file = "COV19_05_agroup.sav"))

# For use in correlation analysis, we duplicate the dataset under name data_corr
data_corr <- data

# We also try to limit the decimals to three significant figures
options(digits = 3, scipen = 999)
# Firstly, because the source file is an SPSS file, we need to specify that we 
# would like to see value labels (such as Male/Female) for selected variables, as
# opposed to just numeric values (such as 1/2). This is not essential for 
# the analysis, but seeing the names of labels will enable better understanding 
# of the results. We also rename key variables to a more human-readable form, 
# while also renaming variables related to Covid-19 concerns, which we will use 
# to construct the Covid-19 concern index with factor analysis (to use for 
# path analysis afterwards). Finally, for convenience, we translate the core 
# variables labels from Czech to English.

data <- data %>% 
  transmute(id = RespondentID,
            q01_gender = recode_factor(as_factor(q01),
            `1` = "female",
            `2` = "male"),
            q02_age = q02,
            q02_age_group = recode_factor(as_factor(Q4_AGE_r),
            `1` = "16-29 years",
            `2` = "30-49 years", 
            `3` = "50-64 years", 
            `4` = "65+"), 
            q03_relationship_type = recode_factor(as_factor(q03),
            `1` = "single", 
            `2` = "relationship", 
            `3` = "married", 
            `4` = "divorced", 
            `5` = "widowed"),
            q04_children = recode_factor(as_factor(q04), 
            `1` = "yes", 
            `2` = "no"),
            q11_education = recode_factor(as_factor(q11), 
            `1` = "unfin_element", 
            `2` = "element", 
            `3` = "unfin_hs", 
            `4` = "hs", 
            `5` = "undergrad", 
            `6` = "postgrad"),
            q18_02_soc_media = recode_factor(as_factor(replace_na(q18_02, 0)),
            `0` = "no", 
            `1` = "yes"),
            q20_public_info = recode_factor(as_factor(q20), 
            `1` = "yes", 
            `2` = "no", 
            `3` = "do_not_know"),
            q34_02_face_mask = recode_factor(as_factor(q34_02), 
            `1` = "yes", 
            `2` = "no"),
            q34_07_hand_washing = recode_factor(as_factor(q34_07), 
            `1` = "yes", 
            `2` = "no"),
            q35_01_contact_close_family = recode_factor(as_factor(q35_01), 
            `1` = "less_often", 
            `2` = "as_before", 
            `3` = "more_often"),
            q35_03_contact_friends = recode_factor(as_factor(q35_03), 
            `1` = "less_often", 
            `2` = "as_before", 
            `3` = "more_often"),
            q36_econ_worry = recode_factor(as_factor(q36), 
            `1` = "very_serious", 
            `2` = "serious", 
            `3` = "limited"),
            q38_alcohol = recode_factor(as_factor(q38), 
            `1` = "yes", 
            `2` = "no"),
            q40_smoking = recode_factor(as_factor(q40), 
            `1` = "yes", 
            `2` = "no"),
            q42_sport = recode_factor(as_factor(q42), 
            `1` = "yes", 
            `2` = "no"),
            q47_self_reporting_health = recode_factor(as_factor(q47), 
            `1` = "excellent", 
            `2` = "good", 
            `3` = "neutral", 
            `4` = "bad", 
            `5` = "very_bad"),
            q48_chronic_illness = recode_factor(as_factor(q48), 
            `1` = "yes", 
            `2` = "no"),
            q49_health_limitations = recode_factor(as_factor(q49), 
            `1` = "limits", 
            `2` = "partially_limits", 
            `3` = "no_limits"),
            q30_concern_infection_covid = q30,
            q31_concern_infection_friends = q31,
            q33_01_concern_situation = q33_01,
            q33_02_concern_low_control = q33_02,
            q33_03_concern_survival_covid = q33_03,
            q33_04_concern_change_employment = q33_04,
            q33_05_concern_infecting_others = q33_05,
            PHQ8 = PHQ8,
            q50_comment = q50)

kableExtra::kbl(head(data), 
      caption = "The overview of the structure of the dataset and its key variables") %>%
      kableExtra::kable_classic(lightable_options = c("striped")) %>%
      kableExtra::scroll_box(width = "830px", height = "100%")
The overview of the structure of the dataset and its key variables
id q01_gender q02_age q02_age_group q03_relationship_type q04_children q11_education q18_02_soc_media q20_public_info q34_02_face_mask q34_07_hand_washing q35_01_contact_close_family q35_03_contact_friends q36_econ_worry q38_alcohol q40_smoking q42_sport q47_self_reporting_health q48_chronic_illness q49_health_limitations q30_concern_infection_covid q31_concern_infection_friends q33_01_concern_situation q33_02_concern_low_control q33_03_concern_survival_covid q33_04_concern_change_employment q33_05_concern_infecting_others PHQ8 q50_comment
1115 female 69 65+ widowed no hs no yes yes yes less_often less_often limited no no no NA NA NA 1 1 2 2 1 1 1 3
349 female 37 30-49 years single no undergrad no yes yes yes as_before less_often serious no no no NA NA NA 1 1 1 5 1 1 1 7
1907 female 23 16-29 years single no undergrad no yes yes yes less_often less_often very_serious yes no yes NA NA NA 5 7 8 3 3 1 10 12
1083 female 20 16-29 years single no hs yes yes yes yes more_often as_before limited yes no yes NA NA NA 4 6 7 7 6 6 5 13
911 female 72 65+ widowed yes hs no yes yes yes less_often less_often serious no no no NA NA NA 10 10 9 9 9 1 9 15
1379 female 19 16-29 years relationship no element yes no yes yes less_often more_often serious yes yes yes NA NA NA 3 8 10 5 2 3 10 8

2.2 Sample descriptive statistics: Depression index (PHQ8)

The PHQ8dependent variable intend to determine the presence and severity of major depressive disorder. The PHQ-8 index construction is standardized and based on the established methodology (Kroenke et al. 2009). The PHQ-8 questionnaire asks the number of days in the past 2 weeks the respondent had experienced a specific depressive symptom.

This variable was recoded by the international team from 8 survey items (see the OSF project page for the precise syntax) and is thus already present in the version of this dataset.

Since we are using several linear models in this report, whose assumption is normal distribution of the residuals, we could benefit from the power transformation of our dependent variable PHQ8 (using Yeo-Johnson function). We name this transformed variable PHQ8_t.

# To summarize the dependent continuous variable, we use the descriptives() 
# function from the jmv package.

descriptives <- jmv::descriptives(
    data = data,
    vars = "PHQ8",
    freq = TRUE,
    box = TRUE,
    median = FALSE,
    range = TRUE,
    sd = TRUE,
    pc = TRUE)

2.2.1 PHQ8 results table

2.2.1.1 Plots

descriptives$plots

2.2.1.2 Descriptives

descriptives$descriptives

 Descriptives                   
 ────────────────────────────── 
                         PHQ8   
 ────────────────────────────── 
   N                     1484   
   Missing                  0   
   Mean                  4.71   
   Standard deviation    4.62   
   Range                 24.0   
   Minimum               0.00   
   Maximum               24.0   
   25th percentile       1.00   
   50th percentile       3.00   
   75th percentile       7.00   
 ────────────────────────────── 

2.3 Sample descriptive statistics: Demographic characteristics (Czech sample)

In the next step, we asses the demographic characteristics of the respondents in the Czech sample.

# To summarize the key demographic variables, we use the descriptives() 
# function from the jmv package.

demo_descriptives <- jmv::descriptives(
    data = data,
    vars = vars("q01_gender",
                "q02_age_group",
                "q03_relationship_type",
                "q04_children",
                "q11_education"),
    bar = TRUE,
    freq = TRUE,
    missing = FALSE,
    mean = FALSE,
    median = FALSE,
    sd = FALSE,
    min = FALSE,
    max = FALSE)

2.3.1 Demographic characteristics results table

2.3.1.1 Plots

demo_descriptives$plots

2.3.1.2 Frequencies

demo_descriptives$frequencies   

 FREQUENCIES

 Frequencies of q01_gender                          
 ────────────────────────────────────────────────── 
   Levels    Counts    % of Total    Cumulative %   
 ────────────────────────────────────────────────── 
   female      1054          71.0            71.0   
   male         430          29.0           100.0   
 ────────────────────────────────────────────────── 


 Frequencies of q02_age_group                            
 ─────────────────────────────────────────────────────── 
   Levels         Counts    % of Total    Cumulative %   
 ─────────────────────────────────────────────────────── 
   16-29 years       379          25.5            25.5   
   30-49 years       440          29.6            55.2   
   50-64 years       206          13.9            69.1   
   65+               459          30.9           100.0   
 ─────────────────────────────────────────────────────── 


 Frequencies of q03_relationship_type                     
 ──────────────────────────────────────────────────────── 
   Levels          Counts    % of Total    Cumulative %   
 ──────────────────────────────────────────────────────── 
   single             332          22.4            22.4   
   relationship       283          19.1            41.4   
   married            586          39.5            80.9   
   divorced           155          10.4            91.4   
   widowed            128           8.6           100.0   
 ──────────────────────────────────────────────────────── 


 Frequencies of q04_children                        
 ────────────────────────────────────────────────── 
   Levels    Counts    % of Total    Cumulative %   
 ────────────────────────────────────────────────── 
   yes          937          63.1            63.1   
   no           547          36.9           100.0   
 ────────────────────────────────────────────────── 


 Frequencies of q11_education                              
 ───────────────────────────────────────────────────────── 
   Levels           Counts    % of Total    Cumulative %   
 ───────────────────────────────────────────────────────── 
   unfin_element         5           0.3             0.3   
   element             109           7.3             7.7   
   unfin_hs             74           5.0            12.7   
   hs                  537          36.2            48.9   
   undergrad           152          10.2            59.1   
   postgrad            607          40.9           100.0   
 ───────────────────────────────────────────────────────── 

3 Building regression model to predict PHQ8

After descriptive statistics, we continue with building and fitting of the regression model based on our hypotheses.

The model has one independent continuous variable - PHQ8. The only other continuous variable in the model is q02_age, which is inputted as a covariate. The rest of the variables are either categorical (both nominal and ordinal) or binary. The linreg() function from the jmv package automatically handles them as dummy variables with reference levels and it is thus not necessary to create further dummy variables prior to this analysis.

3.1 Overview of correlations between individual predictors and outcome

As a first step in the regression model creation, we conduct a correlation analysis. Since we do not presume linearity between all of the variables, we use Spearman’s rank coefficient instead of Pearson’s r. The results below need to be interpreted with caution, since some of the variables are categorical (such as q03_relationship_type), without a defined order. For categorical variables, comparisons using Chi-Square test would be more appropriate, however, in this step, we are primarily looking at the relationship between the outcome (PHQ8) and the theorized predictors. Statistically non-significant correlations (p > 0.05) are crossed out in the correlation matrix.

# While the dataset has been already imported, the values of factor variables 
# were changed from numerics to text strings, therefore that dataset is unsuitable
# for correlation analysis. To solve this, we create a parallel dataset, 
# again renaming the key variables to a more understandable form.

data_corr <- data_corr %>% 
              transmute(q01_gender = q01, 
                        q02_age = q02,
                        q03_relationship_type = q03,
                        q04_children = q04,
                        q11_education = q11,
                        q18_02_soc_media = replace_na(q18_02, 0),
                        q20_public_info = q20,
                        q34_02_face_mask = q34_02,
                        q34_07_hand_washing = q34_07,
                        q36_econ_worry = q36,
                        q35_01_contact_close_family = q35_01,
                        q35_03_contact_friends = q35_03,
                        q38_alcohol = q38,
                        q40_smoking = q40,
                        q42_sport = q42,
                        q47_self_reporting_health = q47,
                        q48_chronic_illness = q48,
                        q49_health_limitations = q49)

data_corr <- cbind(data_corr, PHQ8_t)

res1 <- cor.mtest(data_corr, conf.level = .95)

#Correlation matrix using Spearman coefficient (values with p>0.05 are crossed)
corrplot(cor(data_corr, 
             method = "spearman", 
             use = "complete.obs"), 
             method = "circle", 
             title = "Correlation Matrix - Spearman Coefficient", 
             type = "lower", 
             p.mat = res1$p, 
             sig.level = .05, 
             mar = c(0,0,1,0))

3.2 Theory derived, inductively built regression model

In the first set of models, we avoid potentially biased modifications, such as pairwise comparisons, which could lead to overfitting. Instead, we build four successive models in total (“blocks” in the syntax).

First model uses only the demographic characteristics as predictors. Second model adds the effect of the social media consumption, virus information, economic worries and hygienic measures. Third model adds lifestyle variables, such as alcohol, smoking, sport and social contacts. The fourth model further adds the variables related to self-rated health quality. The performance of each model could be seen in the output below.

linreg_theory <- jmv::linReg(
    data = data,
    dep = "PHQ8_t",
    covs = "q02_age",
    factors = vars("q01_gender",
                   "q03_relationship_type",
                   "q04_children", 
                   "q11_education", 
                   "q18_02_soc_media", 
                   "q20_public_info",
                   "q34_02_face_mask",
                   "q34_07_hand_washing",
                   "q35_01_contact_close_family", 
                   "q35_03_contact_friends", 
                   "q36_econ_worry",
                   "q38_alcohol", 
                   "q40_smoking", 
                   "q42_sport", 
                   "q47_self_reporting_health", 
                   "q48_chronic_illness",
                   "q49_health_limitations"),
    blocks = list(
        list(
            "q01_gender",
            "q02_age",
            "q03_relationship_type",
            "q04_children",
            "q11_education"),
        list(
            "q18_02_soc_media",
            "q20_public_info",
            "q34_02_face_mask",
            "q34_07_hand_washing",
            "q36_econ_worry"),
        list(
            "q40_smoking",
            "q42_sport",
            "q38_alcohol",
            "q35_01_contact_close_family",
            "q35_03_contact_friends"),
        list(
            "q47_self_reporting_health",
            "q48_chronic_illness",
            "q49_health_limitations")),
    refLevels = list(
        list(
            var = "q01_gender",
            ref = "female"),
        list(
            var = "q04_children",
            ref = "no"),
         list(
            var = "q20_public_info",
            ref = "no"),
        list(
            var = "q34_02_face_mask",
            ref = "no"),
        list(
            var = "q34_07_hand_washing",
            ref = "no"),
        list(
            var = "q36_econ_worry",
            ref = "very_serious"),
        list(
            var = "q42_sport",
            ref = "no"),
        list(
            var = "q40_smoking",
            ref = "yes"),
        list(
            var = "q38_alcohol",
            ref = "yes"),
        list(
            var = "q35_01_contact_close_family",
            ref = "less_often"),
        list(
            var = "q35_03_contact_friends",
            ref = "less_often"),
        list(
            var = "q18_02_soc_media",
            ref = "yes"),
        list(
            var = "q03_relationship_type",
            ref = "single"),
        list(
            var = "q47_self_reporting_health",
            ref = "very_bad"),
        list(
            var = "q49_health_limitations",
            ref = "limits"),
        list(
            var = "q11_education",
            ref = "unfin_element"),
        list(
            var = "q48_chronic_illness",
            ref = "yes")),
    r2Adj = TRUE,
    aic = TRUE,
    bic = TRUE,
    rmse = TRUE,
    modelTest = TRUE,
    anova = TRUE,
    ci = TRUE,
    stdEst = TRUE,
    ciStdEst = TRUE,
    durbin = TRUE,
    collin = TRUE)

3.2.1 Regression model performance

3.2.1.1 Model fit measures

linreg_theory$modelFit

 Model Fit Measures                                                                                   
 ──────────────────────────────────────────────────────────────────────────────────────────────────── 
   Model    R        R²       Adjusted R²    AIC     BIC     RMSE     F       df1    df2     p        
 ──────────────────────────────────────────────────────────────────────────────────────────────────── 
       1    0.357    0.128          0.120    4256    4330    1.027    17.7     12    1449    < .001   
       2    0.406    0.165          0.154    4207    4318    1.005    14.9     19    1442    < .001   
       3    0.417    0.174          0.159    4205    4353    1.000    11.6     26    1435    < .001   
       4    0.509    0.259          0.242    4059    4244    0.947    15.2     33    1428    < .001   
 ──────────────────────────────────────────────────────────────────────────────────────────────────── 

3.2.1.2 Model comparisons

linreg_theory$modelComp                 

 Model Comparisons                                                    
 ──────────────────────────────────────────────────────────────────── 
   Model         Model    ΔR²        F        df1    df2     p        
 ──────────────────────────────────────────────────────────────────── 
       1    -        2    0.03697     9.12      7    1442    < .001   
       2    -        3    0.00917     2.28      7    1435     0.026   
       3    -        4    0.08564    23.59      7    1428    < .001   
 ──────────────────────────────────────────────────────────────────── 

3.2.1.3 Model specific results

linreg_theory$models                

 MODEL SPECIFIC RESULTS

 MODEL 1

 Omnibus ANOVA Test                                                                     
 ────────────────────────────────────────────────────────────────────────────────────── 
                            Sum of Squares    df      Mean Square    F         p        
 ────────────────────────────────────────────────────────────────────────────────────── 
   q01_gender                        22.83       1         22.826    21.430    < .001   
   q02_age                           59.72       1         59.721    56.067    < .001   
   q03_relationship_type             13.37       4          3.344     3.139     0.014   
   q04_children                       3.95       1          3.953     3.711     0.054   
   q11_education                      2.98       5          0.595     0.559     0.732   
   Residuals                       1543.43    1449          1.065                       
 ────────────────────────────────────────────────────────────────────────────────────── 
   Note. Type 3 sum of squares


 Model Coefficients - PHQ8_t                                                                                                                
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Predictor                      Estimate    SE         Lower      Upper       t         p         Stand. Estimate    Lower     Upper      
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Intercept                 ᵃ      2.2721    0.47370     1.3429     3.20130     4.796    < .001                                            
   q01_gender:                                                                                                                              
   male – female                   -0.2879    0.06219    -0.4099    -0.16589    -4.629    < .001             -0.262    -0.372    -0.15075   
   q02_age                         -0.0155    0.00207    -0.0196    -0.01144    -7.488    < .001             -0.290    -0.366    -0.21396   
   q03_relationship_type:                                                                                                                   
   relationship – single           -0.1228    0.08942    -0.2982     0.05263    -1.373     0.170             -0.112    -0.271     0.04783   
   married – single                -0.1300    0.10580    -0.3375     0.07754    -1.229     0.219             -0.118    -0.307     0.07046   
   divorced – single                0.1302    0.13185    -0.1284     0.38886     0.988     0.323              0.118    -0.117     0.35338   
   widowed – single                 0.1508    0.14748    -0.1385     0.44011     1.023     0.307              0.137    -0.126     0.39995   
   q04_children:                                                                                                                            
   yes – no                        -0.1725    0.08955    -0.3482     0.00315    -1.926     0.054             -0.157    -0.316     0.00286   
   q11_education:                                                                                                                           
   element – unfin_element          0.4151    0.47546    -0.5175     1.34777     0.873     0.383              0.377    -0.470     1.22479   
   unfin_hs – unfin_element         0.3657    0.47904    -0.5740     1.30538     0.763     0.445              0.332    -0.522     1.18627   
   hs – unfin_element               0.3700    0.46488    -0.5419     1.28188     0.796     0.426              0.336    -0.492     1.16491   
   undergrad – unfin_element        0.2948    0.47100    -0.6291     1.21870     0.626     0.531              0.268    -0.572     1.10750   
   postgrad – unfin_element         0.2931    0.46415    -0.6174     1.20357     0.631     0.528              0.266    -0.561     1.09375   
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   ᵃ Represents reference level


 ASSUMPTION CHECKS

 Durbin–Watson Test for Autocorrelation       
 ──────────────────────────────────────────── 
   Autocorrelation    DW Statistic    p       
 ──────────────────────────────────────────── 
            0.0360            1.93    0.118   
 ──────────────────────────────────────────── 


 Collinearity Statistics                        
 ────────────────────────────────────────────── 
                            VIF     Tolerance   
 ────────────────────────────────────────────── 
   q01_gender               1.05        0.955   
   q02_age                  1.58        0.634   
   q03_relationship_type    1.17        0.856   
   q04_children             1.60        0.625   
   q11_education            1.04        0.965   
 ────────────────────────────────────────────── 


 MODEL 2

 Omnibus ANOVA Test                                                                     
 ────────────────────────────────────────────────────────────────────────────────────── 
                            Sum of Squares    df      Mean Square    F         p        
 ────────────────────────────────────────────────────────────────────────────────────── 
   q01_gender                       20.358       1         20.358    19.862    < .001   
   q02_age                          43.639       1         43.639    42.575    < .001   
   q03_relationship_type            12.964       4          3.241     3.162     0.013   
   q04_children                      3.285       1          3.285     3.205     0.074   
   q11_education                     2.503       5          0.501     0.488     0.785   
   q18_02_soc_media                  8.294       1          8.294     8.092     0.005   
   q20_public_info                   9.429       2          4.715     4.600     0.010   
   q34_02_face_mask                  2.377       1          2.377     2.319     0.128   
   q34_07_hand_washing               0.542       1          0.542     0.528     0.467   
   q36_econ_worry                   40.325       2         20.162    19.671    < .001   
   Residuals                      1478.031    1442          1.025                       
 ────────────────────────────────────────────────────────────────────────────────────── 
   Note. Type 3 sum of squares


 Model Coefficients - PHQ8_t                                                                                                                 
 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Predictor                      Estimate    SE         Lower      Upper       t         p         Stand. Estimate    Lower      Upper      
 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Intercept                 ᵃ      2.3077    0.50752     1.3121     3.30325     4.547    < .001                                             
   q01_gender:                                                                                                                               
   male – female                   -0.2729    0.06124    -0.3931    -0.15280    -4.457    < .001            -0.2480    -0.3572    -0.13886   
   q02_age                         -0.0138    0.00212    -0.0180    -0.00965    -6.525    < .001            -0.2582    -0.3358    -0.18055   
   q03_relationship_type:                                                                                                                    
   relationship – single           -0.1783    0.08826    -0.3514    -0.00515    -2.020     0.044            -0.1620    -0.3193    -0.00468   
   married – single                -0.1535    0.10428    -0.3580     0.05106    -1.472     0.141            -0.1395    -0.3254     0.04640   
   divorced – single                0.0420    0.12998    -0.2130     0.29695     0.323     0.747             0.0381    -0.1936     0.26985   
   widowed – single                 0.1310    0.14505    -0.1536     0.41548     0.903     0.367             0.1190    -0.1396     0.37757   
   q04_children:                                                                                                                             
   yes – no                        -0.1578    0.08815    -0.3307     0.01512    -1.790     0.074            -0.1434    -0.3005     0.01374   
   q11_education:                                                                                                                            
   element – unfin_element          0.5339    0.46709    -0.3823     1.45017     1.143     0.253             0.4852    -0.3474     1.31784   
   unfin_hs – unfin_element         0.4532    0.47044    -0.4696     1.37604     0.963     0.336             0.4119    -0.4268     1.25048   
   hs – unfin_element               0.5047    0.45649    -0.3907     1.40017     1.106     0.269             0.4587    -0.3551     1.27241   
   undergrad – unfin_element        0.4180    0.46260    -0.4894     1.32547     0.904     0.366             0.3799    -0.4447     1.20452   
   postgrad – unfin_element         0.4604    0.45598    -0.4340     1.35489     1.010     0.313             0.4184    -0.3944     1.23126   
   q18_02_soc_media:                                                                                                                         
   no – yes                        -0.1812    0.06369    -0.3061    -0.05624    -2.845     0.005            -0.1646    -0.2782    -0.05111   
   q20_public_info:                                                                                                                          
   yes – no                        -0.2323    0.07753    -0.3844    -0.08020    -2.996     0.003            -0.2111    -0.3493    -0.07288   
   do_not_know – no                -0.2292    0.10812    -0.4413    -0.01713    -2.120     0.034            -0.2083    -0.4010    -0.01556   
   q34_02_face_mask:                                                                                                                         
   yes – no                         0.2439    0.16019    -0.0703     0.55817     1.523     0.128             0.2217    -0.0639     0.50724   
   q34_07_hand_washing:                                                                                                                      
   yes – no                         0.0987    0.13574    -0.1676     0.36495     0.727     0.467             0.0897    -0.1523     0.33165   
   q36_econ_worry:                                                                                                                           
   serious – very_serious          -0.1907    0.07227    -0.3325    -0.04898    -2.639     0.008            -0.1733    -0.3022    -0.04451   
   limited – very_serious          -0.4514    0.07541    -0.5994    -0.30351    -5.986    < .001            -0.4103    -0.5447    -0.27582   
 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   ᵃ Represents reference level


 ASSUMPTION CHECKS

 Durbin–Watson Test for Autocorrelation       
 ──────────────────────────────────────────── 
   Autocorrelation    DW Statistic    p       
 ──────────────────────────────────────────── 
            0.0412            1.91    0.084   
 ──────────────────────────────────────────── 


 Collinearity Statistics                        
 ────────────────────────────────────────────── 
                            VIF     Tolerance   
 ────────────────────────────────────────────── 
   q01_gender               1.05        0.951   
   q02_age                  1.64        0.608   
   q03_relationship_type    1.17        0.852   
   q04_children             1.61        0.623   
   q11_education            1.04        0.961   
   q18_02_soc_media         1.08        0.927   
   q20_public_info          1.03        0.975   
   q34_02_face_mask         1.01        0.990   
   q34_07_hand_washing      1.03        0.975   
   q36_econ_worry           1.01        0.990   
 ────────────────────────────────────────────── 


 MODEL 3

 Omnibus ANOVA Test                                                                           
 ──────────────────────────────────────────────────────────────────────────────────────────── 
                                  Sum of Squares    df      Mean Square    F         p        
 ──────────────────────────────────────────────────────────────────────────────────────────── 
   q01_gender                             21.919       1         21.919    21.517    < .001   
   q02_age                                40.637       1         40.637    39.892    < .001   
   q03_relationship_type                  12.946       4          3.236     3.177     0.013   
   q04_children                            3.489       1          3.489     3.426     0.064   
   q11_education                           2.328       5          0.466     0.457     0.808   
   q18_02_soc_media                        7.051       1          7.051     6.922     0.009   
   q20_public_info                        10.215       2          5.108     5.014     0.007   
   q34_02_face_mask                        2.715       1          2.715     2.665     0.103   
   q34_07_hand_washing                     0.830       1          0.830     0.815     0.367   
   q36_econ_worry                         39.907       2         19.953    19.587    < .001   
   q40_smoking                             1.571       1          1.571     1.542     0.215   
   q42_sport                               8.035       1          8.035     7.887     0.005   
   q38_alcohol                             0.607       1          0.607     0.596     0.440   
   q35_01_contact_close_family             4.022       2          2.011     1.974     0.139   
   q35_03_contact_friends                  0.775       2          0.388     0.381     0.683   
   Residuals                            1461.804    1435          1.019                       
 ──────────────────────────────────────────────────────────────────────────────────────────── 
   Note. Type 3 sum of squares


 Model Coefficients - PHQ8_t                                                                                                                      
 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Predictor                         Estimate    SE         Lower       Upper       t         p         Stand. Estimate    Lower       Upper      
 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Intercept                    ᵃ      2.3665    0.51679     1.35274     3.38023     4.579    < .001                                              
   q01_gender:                                                                                                                                    
   male – female                      -0.2869    0.06185    -0.40823    -0.16558    -4.639    < .001            -0.2607    -0.37098    -0.15047   
   q02_age                            -0.0137    0.00216    -0.01790    -0.00941    -6.316    < .001            -0.2553    -0.33465    -0.17604   
   q03_relationship_type:                                                                                                                         
   relationship – single              -0.1725    0.08831    -0.34572     7.62e-4    -1.953     0.051            -0.1567    -0.31417     6.92e-4   
   married – single                   -0.1387    0.10417    -0.34303     0.06565    -1.331     0.183            -0.1260    -0.31173     0.05966   
   divorced – single                   0.0678    0.12999    -0.18722     0.32275     0.521     0.602             0.0616    -0.17014     0.29330   
   widowed – single                    0.1426    0.14522    -0.14222     0.42750     0.982     0.326             0.1296    -0.12925     0.38849   
   q04_children:                                                                                                                                  
   yes – no                           -0.1636    0.08841    -0.33705     0.00980    -1.851     0.064            -0.1487    -0.30630     0.00890   
   q11_education:                                                                                                                                 
   element – unfin_element             0.5551    0.46717    -0.36135     1.47147     1.188     0.235             0.5044    -0.32838     1.33720   
   unfin_hs – unfin_element            0.4605    0.47001    -0.46151     1.38245     0.980     0.327             0.4185    -0.41940     1.25630   
   hs – unfin_element                  0.5446    0.45690    -0.35161     1.44090     1.192     0.233             0.4949    -0.31953     1.30942   
   undergrad – unfin_element           0.4732    0.46336    -0.43569     1.38217     1.021     0.307             0.4301    -0.39594     1.25605   
   postgrad – unfin_element            0.5173    0.45670    -0.37862     1.41314     1.133     0.258             0.4701    -0.34407     1.28419   
   q18_02_soc_media:                                                                                                                              
   no – yes                           -0.1682    0.06393    -0.29363    -0.04279    -2.631     0.009            -0.1529    -0.26683    -0.03889   
   q20_public_info:                                                                                                                               
   yes – no                           -0.2408    0.07750    -0.39281    -0.08877    -3.107     0.002            -0.2188    -0.35697    -0.08067   
   do_not_know – no                   -0.2487    0.10815    -0.46090    -0.03659    -2.300     0.022            -0.2260    -0.41884    -0.03325   
   q34_02_face_mask:                                                                                                                              
   yes – no                            0.2619    0.16044    -0.05282     0.57664     1.632     0.103             0.2380    -0.04800     0.52402   
   q34_07_hand_washing:                                                                                                                           
   yes – no                            0.1229    0.13616    -0.14419     0.39000     0.903     0.367             0.1117    -0.13103     0.35442   
   q36_econ_worry:                                                                                                                                
   serious – very_serious             -0.1820    0.07233    -0.32384    -0.04008    -2.516     0.012            -0.1654    -0.29429    -0.03643   
   limited – very_serious             -0.4475    0.07548    -0.59561    -0.29948    -5.929    < .001            -0.4067    -0.54126    -0.27216   
   q40_smoking:                                                                                                                                   
   no – yes                           -0.0986    0.07940    -0.25435     0.05717    -1.242     0.215            -0.0896    -0.23114     0.05195   
   q42_sport:                                                                                                                                     
   yes – no                           -0.1563    0.05565    -0.26545    -0.04712    -2.808     0.005            -0.1420    -0.24123    -0.04282   
   q38_alcohol:                                                                                                                                   
   no – yes                           -0.0440    0.05697    -0.15573     0.06778    -0.772     0.440            -0.0400    -0.14152     0.06159   
   q35_01_contact_close_family:                                                                                                                   
   as_before – less_often              0.0138    0.05978    -0.10347     0.13105     0.231     0.818             0.0125    -0.09403     0.11909   
   more_often – less_often             0.1752    0.09034    -0.00203     0.35241     1.939     0.053             0.1592    -0.00184     0.32025   
   q35_03_contact_friends:                                                                                                                        
   as_before – less_often              0.0438    0.14224    -0.23519     0.32284     0.308     0.758             0.0398    -0.21373     0.29338   
   more_often – less_often             0.2690    0.32530    -0.36913     0.90709     0.827     0.408             0.2444    -0.33545     0.82432   
 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   ᵃ Represents reference level


 ASSUMPTION CHECKS

 Durbin–Watson Test for Autocorrelation       
 ──────────────────────────────────────────── 
   Autocorrelation    DW Statistic    p       
 ──────────────────────────────────────────── 
            0.0344            1.93    0.132   
 ──────────────────────────────────────────── 


 Collinearity Statistics                              
 ──────────────────────────────────────────────────── 
                                  VIF     Tolerance   
 ──────────────────────────────────────────────────── 
   q01_gender                     1.07        0.939   
   q02_age                        1.68        0.594   
   q03_relationship_type          1.18        0.849   
   q04_children                   1.62        0.619   
   q11_education                  1.05        0.952   
   q18_02_soc_media               1.09        0.920   
   q20_public_info                1.03        0.972   
   q34_02_face_mask               1.02        0.985   
   q34_07_hand_washing            1.03        0.970   
   q36_econ_worry                 1.01        0.987   
   q40_smoking                    1.03        0.972   
   q42_sport                      1.04        0.957   
   q38_alcohol                    1.05        0.952   
   q35_01_contact_close_family    1.05        0.953   
   q35_03_contact_friends         1.02        0.976   
 ──────────────────────────────────────────────────── 


 MODEL 4

 Omnibus ANOVA Test                                                                            
 ───────────────────────────────────────────────────────────────────────────────────────────── 
                                  Sum of Squares    df      Mean Square    F          p        
 ───────────────────────────────────────────────────────────────────────────────────────────── 
   q01_gender                            27.2954       1        27.2954    29.7472    < .001   
   q02_age                               70.3096       1        70.3096    76.6254    < .001   
   q03_relationship_type                 11.4670       4         2.8668     3.1243     0.014   
   q04_children                           1.8411       1         1.8411     2.0065     0.157   
   q11_education                          5.7255       5         1.1451     1.2480     0.284   
   q18_02_soc_media                       5.9957       1         5.9957     6.5343     0.011   
   q20_public_info                        8.7036       2         4.3518     4.7427     0.009   
   q34_02_face_mask                       2.3673       1         2.3673     2.5800     0.108   
   q34_07_hand_washing                    0.7288       1         0.7288     0.7942     0.373   
   q36_econ_worry                        26.8993       2        13.4497    14.6578    < .001   
   q40_smoking                            1.3333       1         1.3333     1.4531     0.228   
   q42_sport                              0.0893       1         0.0893     0.0973     0.755   
   q38_alcohol                            5.1848       1         5.1848     5.6506     0.018   
   q35_01_contact_close_family            3.7106       2         1.8553     2.0220     0.133   
   q35_03_contact_friends                 1.1510       2         0.5755     0.6272     0.534   
   q47_self_reporting_health             56.4257       4        14.1064    15.3736    < .001   
   q48_chronic_illness                    4.1183       1         4.1183     4.4882     0.034   
   q49_health_limitations                 9.9802       2         4.9901     5.4384     0.004   
   Residuals                           1310.2988    1428         0.9176                        
 ───────────────────────────────────────────────────────────────────────────────────────────── 
   Note. Type 3 sum of squares


 Model Coefficients - PHQ8_t                                                                                                                      
 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Predictor                         Estimate    SE         Lower       Upper       t         p         Stand. Estimate    Lower       Upper      
 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Intercept                    ᵃ     3.61048    0.63562     2.36364     4.85733     5.680    < .001                                              
   q01_gender:                                                                                                                                    
   male – female                     -0.32062    0.05879    -0.43594    -0.20531    -5.454    < .001           -0.29137    -0.39616    -0.18657   
   q02_age                           -0.01839    0.00210    -0.02251    -0.01427    -8.754    < .001           -0.34394    -0.42101    -0.26686   
   q03_relationship_type:                                                                                                                         
   relationship – single             -0.20027    0.08407    -0.36519    -0.03535    -2.382     0.017           -0.18200    -0.33187    -0.03212   
   married – single                  -0.16564    0.09903    -0.35990     0.02861    -1.673     0.095           -0.15053    -0.32706     0.02600   
   divorced – single                  0.03575    0.12361    -0.20672     0.27822     0.289     0.772            0.03249    -0.18786     0.25283   
   widowed – single                   0.03203    0.13851    -0.23968     0.30374     0.231     0.817            0.02911    -0.21781     0.27602   
   q04_children:                                                                                                                                  
   yes – no                          -0.11911    0.08409    -0.28407     0.04584    -1.417     0.157           -0.10824    -0.25814     0.04166   
   q11_education:                                                                                                                                 
   element – unfin_element            0.63075    0.44456    -0.24130     1.50280     1.419     0.156            0.57320    -0.21928     1.36567   
   unfin_hs – unfin_element           0.45938    0.44721    -0.41787     1.33663     1.027     0.304            0.41746    -0.37974     1.21467   
   hs – unfin_element                 0.69132    0.43536    -0.16269     1.54532     1.588     0.113            0.62824    -0.14785     1.40432   
   undergrad – unfin_element          0.63355    0.44147    -0.23246     1.49955     1.435     0.151            0.57574    -0.21125     1.36272   
   postgrad – unfin_element           0.68915    0.43520    -0.16455     1.54285     1.584     0.114            0.62627    -0.14953     1.40207   
   q18_02_soc_media:                                                                                                                              
   no – yes                          -0.15527    0.06074    -0.27443    -0.03612    -2.556     0.011           -0.14111    -0.24939    -0.03282   
   q20_public_info:                                                                                                                               
   yes – no                          -0.22268    0.07396    -0.36776    -0.07759    -3.011     0.003           -0.20236    -0.33421    -0.07051   
   do_not_know – no                  -0.23478    0.10299    -0.43682    -0.03275    -2.280     0.023           -0.21336    -0.39696    -0.02976   
   q34_02_face_mask:                                                                                                                              
   yes – no                           0.24485    0.15244    -0.05418     0.54388     1.606     0.108            0.22251    -0.04923     0.49426   
   q34_07_hand_washing:                                                                                                                           
   yes – no                           0.11542    0.12951    -0.13863     0.36946     0.891     0.373            0.10488    -0.12598     0.33575   
   q36_econ_worry:                                                                                                                                
   serious – very_serious            -0.16588    0.06886    -0.30096    -0.03081    -2.409     0.016           -0.15075    -0.27349    -0.02800   
   limited – very_serious            -0.37513    0.07203    -0.51643    -0.23383    -5.208    < .001           -0.34090    -0.46931    -0.21250   
   q40_smoking:                                                                                                                                   
   no – yes                          -0.09143    0.07585    -0.24021     0.05735    -1.205     0.228           -0.08309    -0.21830     0.05212   
   q42_sport:                                                                                                                                     
   yes – no                          -0.01685    0.05400    -0.12278     0.08909    -0.312     0.755           -0.01531    -0.11158     0.08096   
   q38_alcohol:                                                                                                                                   
   no – yes                          -0.12974    0.05458    -0.23680    -0.02268    -2.377     0.018           -0.11790    -0.21519    -0.02061   
   q35_01_contact_close_family:                                                                                                                   
   as_before – less_often             0.00738    0.05681    -0.10407     0.11882     0.130     0.897            0.00670    -0.09457     0.10798   
   more_often – less_often            0.16629    0.08587    -0.00216     0.33473     1.937     0.053            0.15111    -0.00196     0.30419   
   q35_03_contact_friends:                                                                                                                        
   as_before – less_often             0.10946    0.13522    -0.15579     0.37471     0.809     0.418            0.09947    -0.14158     0.34051   
   more_often – less_often            0.24785    0.30925    -0.35878     0.85448     0.801     0.423            0.22523    -0.32604     0.77651   
   q47_self_reporting_health:                                                                                                                     
   excellent – very_bad              -1.14692    0.41295    -1.95697    -0.33688    -2.777     0.006           -1.04227    -1.77840    -0.30614   
   good – very_bad                   -0.90110    0.40847    -1.70235    -0.09984    -2.206     0.028           -0.81887    -1.54702    -0.09073   
   neutral – very_bad                -0.59178    0.40765    -1.39143     0.20787    -1.452     0.147           -0.53778    -1.26447     0.18891   
   bad – very_bad                    -0.08346    0.41163    -0.89091     0.72400    -0.203     0.839           -0.07584    -0.80962     0.65794   
   q48_chronic_illness:                                                                                                                           
   no – yes                          -0.13069    0.06169    -0.25169    -0.00968    -2.119     0.034           -0.11876    -0.22873    -0.00880   
   q49_health_limitations:                                                                                                                        
   partially_limits – limits         -0.20391    0.14795    -0.49414     0.08631    -1.378     0.168           -0.18531    -0.44905     0.07843   
   no_limits – limits                -0.38518    0.15172    -0.68279    -0.08757    -2.539     0.011           -0.35003    -0.62049    -0.07958   
 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   ᵃ Represents reference level


 ASSUMPTION CHECKS

 Durbin–Watson Test for Autocorrelation       
 ──────────────────────────────────────────── 
   Autocorrelation    DW Statistic    p       
 ──────────────────────────────────────────── 
            0.0348            1.93    0.150   
 ──────────────────────────────────────────── 


 Collinearity Statistics                              
 ──────────────────────────────────────────────────── 
                                  VIF     Tolerance   
 ──────────────────────────────────────────────────── 
   q01_gender                     1.07        0.937   
   q02_age                        1.73        0.580   
   q03_relationship_type          1.18        0.847   
   q04_children                   1.62        0.618   
   q11_education                  1.06        0.946   
   q18_02_soc_media               1.09        0.919   
   q20_public_info                1.03        0.968   
   q34_02_face_mask               1.02        0.984   
   q34_07_hand_washing            1.03        0.967   
   q36_econ_worry                 1.02        0.983   
   q40_smoking                    1.04        0.965   
   q42_sport                      1.07        0.936   
   q38_alcohol                    1.06        0.944   
   q35_01_contact_close_family    1.05        0.952   
   q35_03_contact_friends         1.03        0.974   
   q47_self_reporting_health      1.09        0.914   
   q48_chronic_illness            1.21        0.824   
   q49_health_limitations         1.19        0.841   
 ──────────────────────────────────────────────────── 

3.3 Models derived with stepwise algoritm

As an alternative approach to the theory-derived, inductively build set of models, we choose to use the stepwise regression - combining forward with stepwise selection of the predictors. By using both of the Akaike information criterion (AIC) and Bayesian information criterion (BIC) to select the best-performing model, the algorithm from the MASS package arrives at two simpler models, compared to the 18 predictor variables selected with the previous manual approach. However, while these two models perform well with this particular sample, there is a significant chance of underperformance on the international sample, since stepwise regression is prone to overfitting.

Using AIC-ranked stepwise selection, the algorithm arrives at 13-predictor model and with BIC-ranked selection at 7-predictor model.

In order to allow direct comparison with the manually-selected model, we input the chosen models (based on the AIC and BIC criterion) from the previous step into the linreg() function of the jmv package. The first, simpler model 1 has the 7 predictors from the BIC-selected model. The model 2, has 6 additional variables from AIC-selected stepwise model (to a total of 13).

# We are using the MASS package, which contains stepAIC() function for stepwise 
# regression model selection. We again filter the dataset to only the variables 
# specified with hypotheses

linreg_stepwise <- data %>% dplyr::select(-c(id, 
                                         q02_age_group,
                                         q30_concern_infection_covid,
                                         q31_concern_infection_friends,                
                                         q33_01_concern_situation, 
                                         q33_02_concern_low_control, 
                                         q33_03_concern_survival_covid, 
                                         q33_04_concern_change_employment, 
                                         q33_05_concern_infecting_others,
                                         q50_comment,
                                         PHQ8))

# Fit the full linear model using lm() function from base R
full.model_MASS <- lm(PHQ8_t ~.,
                      data = linreg_stepwise,
                      na.action = na.omit)

# Stepwise regression model using MASS package, ranks on AIC
step.model_AIC <- stepAIC(full.model_MASS, 
                          direction = "both", 
                          trace = FALSE)

# Stepwise regression model using MASS package, ranks on BIC
step.model_BIC <- stepAIC(full.model_MASS, 
                          direction = "both",
                          trace = FALSE, 
                          k = log(nrow(linreg_stepwise)))

# To construct this regression model, we use the linReg() 
# function from the jmv package.

linreg_stepwise2 <- jmv::linReg(
    data = data,
    dep = "PHQ8_t",
    covs = "q02_age",
    factors = vars("q01_gender",
                   "q03_relationship_type",
                   "q04_children", 
                   "q18_02_soc_media", 
                   "q20_public_info",
                   "q34_02_face_mask",
                   "q36_econ_worry",
                   "q38_alcohol", 
                   "q40_smoking", 
                   "q47_self_reporting_health", 
                   "q48_chronic_illness",
                   "q49_health_limitations"),
    blocks = list(
        list(
            "q01_gender",
            "q02_age",
            "q04_children",
            "q36_econ_worry",
            "q18_02_soc_media",
            "q47_self_reporting_health",
            "q49_health_limitations"),
          list(
            "q03_relationship_type",
            "q20_public_info",
            "q34_02_face_mask",
            "q38_alcohol",
            "q40_smoking",
            "q48_chronic_illness")),
    refLevels = list(
        list(
            var = "q01_gender",
            ref = "female"),
        list(
            var = "q04_children",
            ref = "no"),
         list(
            var = "q20_public_info",
            ref = "no"),
        list(
            var = "q34_02_face_mask",
            ref = "no"),
        list(
            var = "q36_econ_worry",
            ref = "very_serious"),
        list(
            var = "q40_smoking",
            ref = "yes"),
        list(
            var = "q38_alcohol",
            ref = "yes"),
        list(
            var = "q18_02_soc_media",
            ref = "yes"),
        list(
            var = "q03_relationship_type",
            ref = "single"),
        list(
            var = "q47_self_reporting_health",
            ref = "very_bad"),
        list(
            var = "q49_health_limitations",
            ref = "limits"),
        list(
            var = "q48_chronic_illness",
            ref = "yes")),
    r2Adj = TRUE,
    aic = TRUE,
    bic = TRUE,
    rmse = TRUE,
    modelTest = TRUE,
    anova = TRUE,
    ci = TRUE,
    stdEst = TRUE,
    ciStdEst = TRUE,
    durbin = TRUE,
    collin = TRUE)

3.3.1 Stepwise model performance

3.3.1.1 AIC-selected model summary

base::summary(step.model_AIC)

Call:
lm(formula = PHQ8_t ~ q01_gender + q02_age + q03_relationship_type + 
    q04_children + q18_02_soc_media + q20_public_info + q34_02_face_mask + 
    q35_01_contact_close_family + q36_econ_worry + q38_alcohol + 
    q47_self_reporting_health + q48_chronic_illness + q49_health_limitations, 
    data = linreg_stepwise, na.action = na.omit)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.9052 -0.7074  0.0472  0.6444  2.7508 

Coefficients:
                                       Estimate Std. Error t value
(Intercept)                             2.84748    0.21803   13.06
q01_gendermale                         -0.32702    0.05759   -5.68
q02_age                                -0.01817    0.00204   -8.89
q03_relationship_typerelationship      -0.18714    0.08280   -2.26
q03_relationship_typemarried           -0.16339    0.09766   -1.67
q03_relationship_typedivorced           0.04996    0.12296    0.41
q03_relationship_typewidowed            0.02361    0.13805    0.17
q04_childrenno                          0.12356    0.08343    1.48
q18_02_soc_mediayes                     0.16279    0.06019    2.70
q20_public_infono                       0.21047    0.07341    2.87
q20_public_infodo_not_know             -0.02529    0.08399   -0.30
q34_02_face_maskno                     -0.24507    0.15083   -1.62
q35_01_contact_close_familyas_before    0.01616    0.05602    0.29
q35_01_contact_close_familymore_often   0.16620    0.08491    1.96
q36_econ_worryserious                  -0.15839    0.06849   -2.31
q36_econ_worrylimited                  -0.36619    0.07162   -5.11
q38_alcoholno                          -0.14346    0.05368   -2.67
q47_self_reporting_healthgood           0.24473    0.06673    3.67
q47_self_reporting_healthneutral        0.55329    0.08851    6.25
q47_self_reporting_healthbad            1.05372    0.15424    6.83
q47_self_reporting_healthvery_bad       1.13657    0.41183    2.76
q48_chronic_illnessno                  -0.13221    0.06128   -2.16
q49_health_limitationspartially_limits -0.15791    0.14579   -1.08
q49_health_limitationsno_limits        -0.34103    0.15000   -2.27
                                                   Pr(>|t|)    
(Intercept)                            < 0.0000000000000002 ***
q01_gendermale                               0.000000016401 ***
q02_age                                < 0.0000000000000002 ***
q03_relationship_typerelationship                   0.02395 *  
q03_relationship_typemarried                        0.09451 .  
q03_relationship_typedivorced                       0.68457    
q03_relationship_typewidowed                        0.86422    
q04_childrenno                                      0.13882    
q18_02_soc_mediayes                                 0.00692 ** 
q20_public_infono                                   0.00420 ** 
q20_public_infodo_not_know                          0.76336    
q34_02_face_maskno                                  0.10443    
q35_01_contact_close_familyas_before                0.77295    
q35_01_contact_close_familymore_often               0.05050 .  
q36_econ_worryserious                               0.02089 *  
q36_econ_worrylimited                        0.000000359690 ***
q38_alcoholno                                       0.00761 ** 
q47_self_reporting_healthgood                       0.00025 ***
q47_self_reporting_healthneutral             0.000000000536 ***
q47_self_reporting_healthbad                 0.000000000012 ***
q47_self_reporting_healthvery_bad                   0.00586 ** 
q48_chronic_illnessno                               0.03113 *  
q49_health_limitationspartially_limits              0.27895    
q49_health_limitationsno_limits                     0.02314 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.958 on 1438 degrees of freedom
  (22 observations deleted due to missingness)
Multiple R-squared:  0.254, Adjusted R-squared:  0.242 
F-statistic: 21.3 on 23 and 1438 DF,  p-value: <0.0000000000000002

3.3.1.2 BIC-selected model summary

base::summary(step.model_BIC)

Call:
lm(formula = PHQ8_t ~ q01_gender + q02_age + q04_children + q18_02_soc_media + 
    q36_econ_worry + q47_self_reporting_health + q49_health_limitations, 
    data = linreg_stepwise, na.action = na.omit)

Residuals:
   Min     1Q Median     3Q    Max 
-3.106 -0.713  0.049  0.698  2.558 

Coefficients:
                                       Estimate Std. Error t value
(Intercept)                             2.60650    0.19349   13.47
q01_gendermale                         -0.30262    0.05641   -5.36
q02_age                                -0.01776    0.00173  -10.27
q04_childrenno                          0.21821    0.06837    3.19
q18_02_soc_mediayes                     0.16458    0.06041    2.72
q36_econ_worryserious                  -0.18491    0.06857   -2.70
q36_econ_worrylimited                  -0.38561    0.07158   -5.39
q47_self_reporting_healthgood           0.27719    0.06636    4.18
q47_self_reporting_healthneutral        0.60516    0.08602    7.04
q47_self_reporting_healthbad            1.09835    0.15190    7.23
q47_self_reporting_healthvery_bad       1.17617    0.41258    2.85
q49_health_limitationspartially_limits -0.13872    0.14613   -0.95
q49_health_limitationsno_limits        -0.36459    0.14941   -2.44
                                                   Pr(>|t|)    
(Intercept)                            < 0.0000000000000002 ***
q01_gendermale                             0.00000009434033 ***
q02_age                                < 0.0000000000000002 ***
q04_childrenno                                       0.0014 ** 
q18_02_soc_mediayes                                  0.0065 ** 
q36_econ_worryserious                                0.0071 ** 
q36_econ_worrylimited                      0.00000008360844 ***
q47_self_reporting_healthgood              0.00003126193214 ***
q47_self_reporting_healthneutral           0.00000000000305 ***
q47_self_reporting_healthbad               0.00000000000077 ***
q47_self_reporting_healthvery_bad                    0.0044 ** 
q49_health_limitationspartially_limits               0.3426    
q49_health_limitationsno_limits                      0.0148 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.966 on 1449 degrees of freedom
  (22 observations deleted due to missingness)
Multiple R-squared:  0.235, Adjusted R-squared:  0.229 
F-statistic: 37.2 on 12 and 1449 DF,  p-value: <0.0000000000000002

3.3.1.3 Stepwise model fit measures

linreg_stepwise2$modelFit

 Model Fit Measures                                                                                   
 ──────────────────────────────────────────────────────────────────────────────────────────────────── 
   Model    R        R²       Adjusted R²    AIC     BIC     RMSE     F       df1    df2     p        
 ──────────────────────────────────────────────────────────────────────────────────────────────────── 
       1    0.485    0.235          0.229    4064    4138    0.962    37.2     12    1449    < .001   
       2    0.503    0.253          0.242    4049    4176    0.951    22.2     22    1439    < .001   
 ──────────────────────────────────────────────────────────────────────────────────────────────────── 

3.3.1.4 Stepwise model comparisons

linreg_stepwise2$modelComp                  

 Model Comparisons                                                  
 ────────────────────────────────────────────────────────────────── 
   Model         Model    ΔR²       F       df1    df2     p        
 ────────────────────────────────────────────────────────────────── 
       1    -        2    0.0179    3.45     10    1439    < .001   
 ────────────────────────────────────────────────────────────────── 

3.3.1.5 Stepwise model specific results

linreg_stepwise2$models             

 MODEL SPECIFIC RESULTS

 MODEL 1

 Omnibus ANOVA Test                                                                         
 ────────────────────────────────────────────────────────────────────────────────────────── 
                                Sum of Squares    df      Mean Square    F         p        
 ────────────────────────────────────────────────────────────────────────────────────────── 
   q01_gender                            26.87       1         26.869     28.78    < .001   
   q02_age                               98.57       1         98.568    105.57    < .001   
   q04_children                           9.51       1          9.511     10.19     0.001   
   q36_econ_worry                        28.47       2         14.237     15.25    < .001   
   q18_02_soc_media                       6.93       1          6.930      7.42     0.007   
   q47_self_reporting_health             71.59       4         17.896     19.17    < .001   
   q49_health_limitations                14.07       2          7.034      7.53    < .001   
   Residuals                           1352.85    1449          0.934                       
 ────────────────────────────────────────────────────────────────────────────────────────── 
   Note. Type 3 sum of squares


 Model Coefficients - PHQ8_t                                                                                                                
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Predictor                       Estimate    SE         Lower      Upper      t          p         Stand. Estimate    Lower     Upper     
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Intercept                  ᵃ      4.1655    0.41074     3.3597     4.9712     10.141    < .001                                           
   q01_gender:                                                                                                                              
   male – female                    -0.3026    0.05641    -0.4133    -0.1920     -5.365    < .001            -0.2750    -0.376    -0.1745   
   q02_age                          -0.0178    0.00173    -0.0211    -0.0144    -10.275    < .001            -0.3321    -0.395    -0.2687   
   q04_children:                                                                                                                            
   yes – no                         -0.2182    0.06837    -0.3523    -0.0841     -3.192     0.001            -0.1983    -0.320    -0.0764   
   q36_econ_worry:                                                                                                                          
   serious – very_serious           -0.1849    0.06857    -0.3194    -0.0504     -2.697     0.007            -0.1680    -0.290    -0.0458   
   limited – very_serious           -0.3856    0.07158    -0.5260    -0.2452     -5.387    < .001            -0.3504    -0.478    -0.2228   
   q18_02_soc_media:                                                                                                                        
   no – yes                         -0.1646    0.06041    -0.2831    -0.0461     -2.724     0.007            -0.1496    -0.257    -0.0419   
   q47_self_reporting_health:                                                                                                               
   excellent – very_bad             -1.1762    0.41258    -1.9855    -0.3669     -2.851     0.004            -1.0688    -1.804    -0.3334   
   good – very_bad                  -0.8990    0.40919    -1.7016    -0.0963     -2.197     0.028            -0.8170    -1.546    -0.0875   
   neutral – very_bad               -0.5710    0.40919    -1.3737     0.2316     -1.395     0.163            -0.5189    -1.248     0.2105   
   bad – very_bad                   -0.0778    0.41362    -0.8892     0.7335     -0.188     0.851            -0.0707    -0.808     0.6666   
   q49_health_limitations:                                                                                                                  
   partially_limits – limits        -0.1387    0.14613    -0.4254     0.1479     -0.949     0.343            -0.1261    -0.387     0.1344   
   no_limits – limits               -0.3646    0.14941    -0.6577    -0.0715     -2.440     0.015            -0.3313    -0.598    -0.0650   
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   ᵃ Represents reference level


 ASSUMPTION CHECKS

 Durbin–Watson Test for Autocorrelation       
 ──────────────────────────────────────────── 
   Autocorrelation    DW Statistic    p       
 ──────────────────────────────────────────── 
            0.0369            1.92    0.120   
 ──────────────────────────────────────────── 


 Collinearity Statistics                            
 ────────────────────────────────────────────────── 
                                VIF     Tolerance   
 ────────────────────────────────────────────────── 
   q01_gender                   1.02        0.985   
   q02_age                      1.41        0.711   
   q04_children                 1.30        0.766   
   q36_econ_worry               1.01        0.994   
   q18_02_soc_media             1.07        0.933   
   q47_self_reporting_health    1.07        0.934   
   q49_health_limitations       1.14        0.874   
 ────────────────────────────────────────────────── 


 MODEL 2

 Omnibus ANOVA Test                                                                        
 ───────────────────────────────────────────────────────────────────────────────────────── 
                                Sum of Squares    df      Mean Square    F        p        
 ───────────────────────────────────────────────────────────────────────────────────────── 
   q01_gender                            27.91       1         27.912    30.40    < .001   
   q02_age                               82.25       1         82.249    89.58    < .001   
   q04_children                           1.99       1          1.992     2.17     0.141   
   q36_econ_worry                        25.77       2         12.887    14.04    < .001   
   q18_02_soc_media                       5.93       1          5.925     6.45     0.011   
   q47_self_reporting_health             56.40       4         14.100    15.36    < .001   
   q49_health_limitations                 9.45       2          4.727     5.15     0.006   
   q03_relationship_type                 12.33       4          3.082     3.36     0.010   
   q20_public_info                        7.61       2          3.804     4.14     0.016   
   q34_02_face_mask                       2.28       1          2.282     2.49     0.115   
   q38_alcohol                            5.96       1          5.964     6.50     0.011   
   q40_smoking                            1.64       1          1.642     1.79     0.181   
   q48_chronic_illness                    4.60       1          4.598     5.01     0.025   
   Residuals                           1321.19    1439          0.918                      
 ───────────────────────────────────────────────────────────────────────────────────────── 
   Note. Type 3 sum of squares


 Model Coefficients - PHQ8_t                                                                                                                
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Predictor                       Estimate    SE         Lower      Upper      t         p         Stand. Estimate    Lower      Upper     
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Intercept                  ᵃ      4.3849    0.44382     3.5143     5.2555     9.880    < .001                                            
   q01_gender:                                                                                                                              
   male – female                    -0.3164    0.05738    -0.4289    -0.2038    -5.514    < .001            -0.2875    -0.3898    -0.1852   
   q02_age                          -0.0189    0.00200    -0.0228    -0.0150    -9.465    < .001            -0.3538    -0.4271    -0.2805   
   q04_children:                                                                                                                            
   yes – no                         -0.1227    0.08333    -0.2862     0.0407    -1.473     0.141            -0.1115    -0.2601     0.0370   
   q36_econ_worry:                                                                                                                          
   serious – very_serious           -0.1555    0.06851    -0.2899    -0.0211    -2.270     0.023            -0.1413    -0.2635    -0.0192   
   limited – very_serious           -0.3632    0.07161    -0.5037    -0.2228    -5.072    < .001            -0.3301    -0.4577    -0.2024   
   q18_02_soc_media:                                                                                                                        
   no – yes                         -0.1534    0.06037    -0.2718    -0.0349    -2.540     0.011            -0.1394    -0.2470    -0.0318   
   q47_self_reporting_health:                                                                                                               
   excellent – very_bad             -1.1430    0.41170    -1.9506    -0.3354    -2.776     0.006            -1.0387    -1.7726    -0.3048   
   good – very_bad                  -0.8974    0.40752    -1.6968    -0.0980    -2.202     0.028            -0.8155    -1.5420    -0.0890   
   neutral – very_bad               -0.5974    0.40695    -1.3956     0.2009    -1.468     0.142            -0.5429    -1.2683     0.1826   
   bad – very_bad                   -0.1025    0.41099    -0.9087     0.7037    -0.249     0.803            -0.0932    -0.8258     0.6395   
   q49_health_limitations:                                                                                                                  
   partially_limits – limits        -0.1526    0.14589    -0.4388     0.1336    -1.046     0.296            -0.1387    -0.3987     0.1214   
   no_limits – limits               -0.3400    0.15004    -0.6343    -0.0457    -2.266     0.024            -0.3090    -0.5765    -0.0415   
   q03_relationship_type:                                                                                                                   
   relationship – single            -0.2024    0.08245    -0.3641    -0.0407    -2.455     0.014            -0.1839    -0.3309    -0.0369   
   married – single                 -0.1680    0.09757    -0.3593     0.0234    -1.721     0.085            -0.1526    -0.3265     0.0213   
   divorced – single                 0.0380    0.12281    -0.2029     0.2789     0.310     0.757             0.0346    -0.1844     0.2535   
   widowed – single                  0.0302    0.13777    -0.2401     0.3004     0.219     0.827             0.0274    -0.2182     0.2730   
   q20_public_info:                                                                                                                         
   yes – no                         -0.2055    0.07336    -0.3495    -0.0616    -2.802     0.005            -0.1868    -0.3176    -0.0560   
   do_not_know – no                 -0.2222    0.10208    -0.4224    -0.0219    -2.176     0.030            -0.2019    -0.3839    -0.0199   
   q34_02_face_mask:                                                                                                                        
   yes – no                          0.2378    0.15085    -0.0581     0.5337     1.577     0.115             0.2161    -0.0528     0.4850   
   q38_alcohol:                                                                                                                             
   no – yes                         -0.1373    0.05386    -0.2429    -0.0316    -2.549     0.011            -0.1248    -0.2208    -0.0287   
   q40_smoking:                                                                                                                             
   no – yes                         -0.1000    0.07475    -0.2466     0.0467    -1.337     0.181            -0.0909    -0.2241     0.0424   
   q48_chronic_illness:                                                                                                                     
   no – yes                         -0.1375    0.06142    -0.2579    -0.0170    -2.238     0.025            -0.1249    -0.2344    -0.0154   
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   ᵃ Represents reference level


 ASSUMPTION CHECKS

 Durbin–Watson Test for Autocorrelation       
 ──────────────────────────────────────────── 
   Autocorrelation    DW Statistic    p       
 ──────────────────────────────────────────── 
            0.0372            1.92    0.120   
 ──────────────────────────────────────────── 


 Collinearity Statistics                            
 ────────────────────────────────────────────────── 
                                VIF     Tolerance   
 ────────────────────────────────────────────────── 
   q01_gender                   1.04        0.960   
   q02_age                      1.64        0.609   
   q04_children                 1.60        0.624   
   q36_econ_worry               1.01        0.987   
   q18_02_soc_media             1.08        0.925   
   q47_self_reporting_health    1.09        0.920   
   q49_health_limitations       1.18        0.848   
   q03_relationship_type        1.17        0.856   
   q20_public_info              1.02        0.979   
   q34_02_face_mask             1.01        0.995   
   q38_alcohol                  1.05        0.956   
   q40_smoking                  1.02        0.980   
   q48_chronic_illness          1.21        0.828   
 ────────────────────────────────────────────────── 

4 Covid-19 concern factor as a mediator for depression

4.1 Creation of the Covid-19 concern index, step 1: overview of survey items

Aside from the regression model, we intend to explore the mediating role of concern/anxiety between the consumption of social media and depression through a mediation/moderation analysis (in section 5).

Unlike as is in the case of PHQ-8 index as a measure of depression, this survey does not have a standardized measure of of Covid-19 concern or anxiety. We therefore try to proceed inductively, using Covid-19-related survey items that could represent the underlying construct.

Therefore, in this section, we aim to construct a Covid-19 concern index from several survey items using factor analysis. As a first step, we select the survey items, which should be the manifestation of the latent factor of Covid-19-related concern/anxiety.

These survey items are:

Survey question (1-10 scale) Original variable Renamed variable name
How scared are you of the risk of getting sick? q30 q30_concern_infection_covid
How scared are you of the risk that someone in your family or network of friends will get COVID-19? q31 q31_concern_infection_friends
I feel very anxious about the health emergency. q33_01 q33_01_concern_situation
I think I have little control over whether I get the infection. q33_02 q33_02_concern_low_control
I am scared that I will not be able to survive if I get sick due to COVID-19 or I got sick and I was scared that I would not survive. q33_03 q33_03_concern_survival_covid
I thought about quitting my job / dropping out of school due to COVID-19. q33_04 q33_04_concern_change_employment
I am afraid of transmitting the coronavirus to others. q33_05 q33_05_concern_infecting_others

4.2 Creation of the Covid-19 concern index, step 2: survey items descriptives and pre-processing

After the initial selection, we analyze these survey items with a set of descriptive statistics. To follow the established principles pertaining to the factor analyses, we also split the sample into two randomly chosen halves (Cabrera-Nguyen 2010). The first half of the data set will be used for the Exploratory Factor Analysis, while the second half will be used by the Reliability and Confirmatory Factor Analyses (all functions from jmv package).

anx_items_descriptives <- jmv::descriptives(
                            data = data,
                            vars = vars("q30_concern_infection_covid", 
                                        "q31_concern_infection_friends", 
                                        "q33_01_concern_situation", 
                                        "q33_02_concern_low_control", 
                                        "q33_03_concern_survival_covid", 
                                        "q33_04_concern_change_employment", 
                                        "q33_05_concern_infecting_others"),
                                        hist = TRUE,
                                        min = FALSE,
                                        max = FALSE)

# We also split the sample into two halves. The "training" half, on which we 
# conduct the EFA analysis and "test" part, on which we 
# test our construct through CFA.

set.seed(2021)
train_set <- data %>% slice_sample(n = 742)
test_set <- setdiff(data,train_set)

4.2.1 Concern items results

4.2.1.1 Plots

anx_items_descriptives$plots

4.2.1.2 Descriptives

anx_items_descriptives$descriptives 

 Descriptives                                                                                                                                                                                                                                             
 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
                         q30_concern_infection_covid    q31_concern_infection_friends    q33_01_concern_situation    q33_02_concern_low_control    q33_03_concern_survival_covid    q33_04_concern_change_employment    q33_05_concern_infecting_others   
 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   N                                            1482                             1482                        1484                          1484                             1484                                1484                               1484   
   Missing                                         2                                2                           0                             0                                0                                   0                                  0   
   Mean                                         4.30                             5.78                        5.70                          4.36                             3.24                                1.82                               5.76   
   Median                                       4.00                             6.00                        5.00                          4.00                             2.00                                1.00                               6.00   
   Standard deviation                           2.36                             2.61                        2.76                          2.56                             2.70                                2.09                               3.17   
 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 

4.3 Creation of the Covid-19 concern index, step 3: Exploratory Factor Analysis of survey items

In the next step, we conduct an Exploratory Factor Analysis on these variables.

In line with best practices, we conduct the assumption checks (KMO and Bartlett’s Sphericity tests), set a cutoff for eigenvalue of >1 and hide factor loading below 0.4.

The result is therefore a one-factor construct, which includes all of the variables, except for the q33_04_concern_change_employment, which does not seem to be a good fit for the manifestation of Covid-19 concern within this group of variables. We will exclude this variable in the next step.

# To conduct the EFA, we use the efa() function from the jmv package on 
# the "train" data set (as opposed to the "test" dataset used for CFA).

jmv::efa(
    data = train_set,
    vars = vars("q30_concern_infection_covid", 
                "q31_concern_infection_friends", 
                "q33_01_concern_situation", 
                "q33_02_concern_low_control", 
                "q33_03_concern_survival_covid", 
                "q33_04_concern_change_employment", 
                "q33_05_concern_infecting_others"),
    nFactorMethod = "eigen",
    nFactors = 1,
    minEigen = 1,
    rotation = "promax",
    hideLoadings = 0.4,
    screePlot = TRUE,
    factorSummary = TRUE,
    kmo = TRUE,
    bartlett = TRUE)

 EXPLORATORY FACTOR ANALYSIS

 Factor Loadings                                             
 ─────────────────────────────────────────────────────────── 
                                       1        Uniqueness   
 ─────────────────────────────────────────────────────────── 
   q30_concern_infection_covid         0.861         0.258   
   q31_concern_infection_friends       0.813         0.340   
   q33_01_concern_situation            0.577         0.667   
   q33_02_concern_low_control          0.443         0.804   
   q33_03_concern_survival_covid       0.454         0.794   
   q33_04_concern_change_employment                  0.953   
   q33_05_concern_infecting_others     0.533         0.716   
 ─────────────────────────────────────────────────────────── 
   Note. 'Minimum residual' extraction method was used
   in combination with a 'promax' rotation


 FACTOR STATISTICS

 Summary                                                    
 ────────────────────────────────────────────────────────── 
   Factor    SS Loadings    % of Variance    Cumulative %   
 ────────────────────────────────────────────────────────── 
   1                2.47             35.3            35.3   
 ────────────────────────────────────────────────────────── 


 ASSUMPTION CHECKS

 Bartlett's Test of Sphericity 
 ───────────────────────────── 
   χ²      df    p        
 ───────────────────────────── 
   1376    21    < .001   
 ───────────────────────────── 


 KMO Measure of Sampling Adequacy              
 ───────────────────────────────────────────── 
                                       MSA     
 ───────────────────────────────────────────── 
   Overall                             0.779   
   q30_concern_infection_covid         0.743   
   q31_concern_infection_friends       0.719   
   q33_01_concern_situation            0.883   
   q33_02_concern_low_control          0.849   
   q33_03_concern_survival_covid       0.823   
   q33_04_concern_change_employment    0.730   
   q33_05_concern_infecting_others     0.812   
 ───────────────────────────────────────────── 

4.4 Creation of the Covid-19 concern index, step 3: Reliability Analysis of the index items

Secondly, we conduct a Reliability Analysis of the Covid-19 concern factor. We use a cutoff value of 0.7 for both McDonald’s Omega and Cronbach’s Alpha. The scale passes this cutoff and the statistics would not be improved if any of the items were dropped.

# To conduct the reliability analysis, we use the reliability() function from the 
#  jmv package on the "test" data set (as opposed to the "train" dataset used for EFA).

jmv::reliability(
    data = test_set,
    vars = vars("q30_concern_infection_covid", 
                "q31_concern_infection_friends", 
                "q33_01_concern_situation", 
                "q33_02_concern_low_control", 
                "q33_03_concern_survival_covid", 
                "q33_05_concern_infecting_others"),
    omegaScale = TRUE,
    alphaItems = TRUE,
    omegaItems = TRUE)

 RELIABILITY ANALYSIS

 Scale Reliability Statistics              
 ───────────────────────────────────────── 
            Cronbach's α    McDonald's ω   
 ───────────────────────────────────────── 
   scale           0.784           0.797   
 ───────────────────────────────────────── 


 Item Reliability Statistics                                         
 ─────────────────────────────────────────────────────────────────── 
                                      Cronbach's α    McDonald's ω   
 ─────────────────────────────────────────────────────────────────── 
   q30_concern_infection_covid               0.719           0.726   
   q31_concern_infection_friends             0.724           0.738   
   q33_01_concern_situation                  0.752           0.772   
   q33_02_concern_low_control                0.761           0.782   
   q33_03_concern_survival_covid             0.775           0.790   
   q33_05_concern_infecting_others           0.773           0.784   
 ─────────────────────────────────────────────────────────────────── 

4.5 Creation of the Covid-19 concern index, step 4: Confirmatory Factor Analysis of the index items

According to the commonly used cut-offs for estimating CFA fit, we report that the Standardized Root Mean Square Residual is 0.0521 (cut-off SRMR <0.08), which indicates a good fit. However, Root Mean Square Error of Approximation (90% CI) is 0.130-0.171 (cut-off < 0.08), the Comparative Fit Index is 0.887 (cut-off CFI ≥.90), and the chi-square test value is 159 (p < 0.001), which does not indicate a good-fit.

# To conduct the CFA, we use the cfa() function from the jmv package on the "test" 
# data set (as opposed to the "train" dataset used for EFA).

jmv::cfa(
    data = test_set,
    factors = list(
        list(
            label = "Concern",
            vars = c(
                "q30_concern_infection_covid",
                "q31_concern_infection_friends",
                "q33_01_concern_situation",
                "q33_02_concern_low_control",
                "q33_03_concern_survival_covid",
                "q33_05_concern_infecting_others"))),
    resCov = list(),
    ci = TRUE,
    stdEst = TRUE,
    factCovEst = FALSE,
    fitMeasures = c("cfi", "tli", "rmsea", "srmr"),
    corRes = TRUE)

 CONFIRMATORY FACTOR ANALYSIS

 Factor Loadings                                                                                                             
 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Factor     Indicator                          Estimate    SE        Lower    Upper    Z       p         Stand. Estimate   
 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Concern    q30_concern_infection_covid            1.99    0.0787     1.84     2.15    25.3    < .001              0.834   
              q31_concern_infection_friends          2.08    0.0869     1.91     2.25    23.9    < .001              0.800   
              q33_01_concern_situation               1.57    0.1015     1.37     1.77    15.4    < .001              0.566   
              q33_02_concern_low_control             1.27    0.0962     1.08     1.45    13.1    < .001              0.495   
              q33_03_concern_survival_covid          1.31    0.1037     1.11     1.51    12.6    < .001              0.480   
              q33_05_concern_infecting_others        1.70    0.1198     1.46     1.93    14.2    < .001              0.534   
 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 


 MODEL FIT

 Test for Exact Fit      
 ─────────────────────── 
   χ²     df    p        
 ─────────────────────── 
   159     9    < .001   
 ─────────────────────── 


 Fit Measures                                            
 ─────────────────────────────────────────────────────── 
   CFI      TLI      SRMR      RMSEA    Lower    Upper   
 ─────────────────────────────────────────────────────── 
   0.887    0.812    0.0521    0.150    0.130    0.171   
 ─────────────────────────────────────────────────────── 


 POST-HOC MODEL PERFORMANCE

 Residuals for Observed Correlation Matrix                                                                                                                                                                                         
 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
                                      q30_concern_infection_covid    q31_concern_infection_friends    q33_01_concern_situation    q33_02_concern_low_control    q33_03_concern_survival_covid    q33_05_concern_infecting_others   
 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   q30_concern_infection_covid                                                               0.021                      -0.028                        -0.005                            0.057                             -0.075   
   q31_concern_infection_friends                                                                                        -0.016                        -0.084                           -0.099                              0.098   
   q33_01_concern_situation                                                                                                                            0.128                            0.035                              0.009   
   q33_02_concern_low_control                                                                                                                                                           0.120                              0.026   
   q33_03_concern_survival_covid                                                                                                                                                                                          -0.060   
   q33_05_concern_infecting_others                                                                                                                                                                                                 
 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 

4.6 Creation of Covid-19 concern index, step 5: creation, descriptives and updated correlation plot

After Reliability Analysis and CFA, we combine the multiple variables into one named concern_index. We also render visualization and descriptive statistics for the new concern_index variable.

# Creating the Covid-19-related concern/anxiety index, consisting of the average of 
# the values of the multiple variables selected through factor analysis to
# represent the underlying construct.

concern_index <- apply(cbind(data$q30_concern_infection_covid,
                             data$q31_concern_infection_friends,
                             data$q33_01_concern_situation,
                             data$q33_02_concern_low_control,
                             data$q33_03_concern_survival_covid,
                             data$q33_05_concern_infecting_others), 1, mean)

#Adding the vector as an column to the existing dataset.

data <- cbind(data, concern_index)
data_corr <- cbind(data_corr, concern_index)

#To summarize the concern_index variable, we use the descriptives() 
# function from the jmv package.

anx_index_descriptives <- jmv::descriptives(
                                            data = data,
                                            missing = TRUE,
                                            vars = "concern_index",
                                            sd = TRUE,
                                            median = FALSE,
                                            pc = TRUE,
                                            range = TRUE,
                                            box = TRUE)

# Function to get the result from the correlation matrix into a data frame
flattenCorrMatrix <- function(cormat, pmat) {
  ut <- upper.tri(cormat)
  data.frame(
    row = rownames(cormat)[row(cormat)[ut]],
    column = rownames(cormat)[col(cormat)[ut]],
    cor = (cormat)[ut],
    p = pmat[ut]
    )
}

#Correlation matrix using Spearman coefficient 
corr_mtx <- rcorr(as.matrix(data_corr), type = "spearman")
 
# Selecting only significant correlates for PHQ8 (values with p>0.05 are excluded)
flattenCorrMatrix(corr_mtx$r, corr_mtx$P) %>% filter(p <= 0.05,
                                                     column %in% c("PHQ8_t")) %>% 
                                              arrange(desc(abs(cor)))
                           row column     cor                    p
1                      q02_age PHQ8_t -0.3113 0.000000000000000000
2                 q04_children PHQ8_t  0.2593 0.000000000000000000
3        q03_relationship_type PHQ8_t -0.2092 0.000000000000000444
4             q18_02_soc_media PHQ8_t  0.1887 0.000000000000232259
5    q47_self_reporting_health PHQ8_t  0.1845 0.000000000001153300
6               q36_econ_worry PHQ8_t -0.1502 0.000000006065404623
7       q49_health_limitations PHQ8_t -0.1448 0.000000027075539144
8                q11_education PHQ8_t -0.1250 0.000001353406583249
9              q20_public_info PHQ8_t  0.1120 0.000015253877716948
10 q35_01_contact_close_family PHQ8_t  0.1024 0.000077824971264739
11         q48_chronic_illness PHQ8_t -0.0835 0.001404622458688554
12                  q01_gender PHQ8_t -0.0814 0.001693246620673605
13                 q40_smoking PHQ8_t -0.0677 0.009065341895034829
# Selecting only significant correlates for concern index (values with p>0.05 are excluded)
flattenCorrMatrix(corr_mtx$r, corr_mtx$P) %>% filter(p <= 0.05,
                                                     column %in% c("concern_index")) %>% 
                                              arrange(desc(abs(cor)))
                           row        column     cor                  p
1                       PHQ8_t concern_index  0.2665 0.0000000000000000
2    q47_self_reporting_health concern_index  0.2550 0.0000000000000000
3          q48_chronic_illness concern_index -0.1933 0.0000000000000946
4       q49_health_limitations concern_index -0.1662 0.0000000001683467
5          q34_07_hand_washing concern_index -0.1169 0.0000064627762864
6               q36_econ_worry concern_index -0.1026 0.0000758838946182
7                    q42_sport concern_index  0.0805 0.0019215744673602
8  q35_01_contact_close_family concern_index -0.0799 0.0020720004591863
9              q20_public_info concern_index  0.0738 0.0044853171363255
10      q35_03_contact_friends concern_index -0.0698 0.0071717066761323
11                  q01_gender concern_index -0.0587 0.0238620102866376
12            q34_02_face_mask concern_index -0.0578 0.0259869544484910

4.6.1 Covid-19 concern index results

4.6.1.1 Plots

anx_index_descriptives$plots

4.6.1.2 Descriptives

anx_index_descriptives$descriptives 

 Descriptives                            
 ─────────────────────────────────────── 
                         concern_index   
 ─────────────────────────────────────── 
   N                              1482   
   Missing                           2   
   Mean                           4.86   
   Standard deviation             1.86   
   Range                          9.00   
   Minimum                        1.00   
   Maximum                        10.0   
   25th percentile                3.50   
   50th percentile                4.83   
   75th percentile                6.17   
 ─────────────────────────────────────── 

5 Path analysis with a simplified model

5.1 Moderated mediation model diagrams and pre-processing

To explore our hypothesized pathway (see H13) between social media exposure and depression, partially mediated by Covid-19-related concerns and moderated by age (which is presumed to influence both the social media exposure and the depression pathway), we conduct a mediation-moderation analysis using the lavaan package, conceptually structured as a Hayes model nr. 76.

# Before running the model, we need to transform the social media string 
# dummy (yes/no) back to its numeric form, with similar operation for gender.

levels(data$q18_02_soc_media) <- list("1" = "yes", "0" = "no")
levels(data$q01_gender) <- list("0" = "female", "1" = "male")
data$q01_gender <- as.numeric(as.character(data$q01_gender))
data$q18_02_soc_media <- as.numeric(as.character(data$q18_02_soc_media))

# Centering continuous variables with scaling
data_sem <- data %>% 
        filter(!is.na(concern_index)) %>% 
        mutate(concern_index.c = scale(concern_index, scale = TRUE),
               PHQ8.c = scale(PHQ8_t, scale = TRUE),
               q02_age.c = scale(q02_age, scale = TRUE))

# Labels for diagrams
labels_H76 <- list(X = "Social Media", 
                   M = "Concern", 
                   Y = "Depression", 
                   W = "Age", 
                   Z = "Gender")

5.1.1 Path analysis model structure

5.1.1.1 Conceptual diagram

pmacroModel(76,
            labels = labels_H76,
            xmargin = 0,
            rady = 0.047,
            radx = 0.09,
            ylim = c(0.15, 0.8))

5.1.1.2 Statistical diagram with path names

statisticalDiagram(76,
                   labels = labels_H76,
                   whatLabel = "name",
                   xmargin = 0.01,
                   rady = 0.03,
                   radx = 0.11,
                   ylim = c(0.06, 0.95),
                   xlim = c(0.01, 1))

5.2 Moderated mediation model specification and results

In the second step, we specify the key pathways and run the analysis, while bootstrapping the confidence intervals.

# Mediation-moderation analysis (path analysis framework, SEM) using lavaan package.

# First, we specify the model pathways
spec_mod <- "
# Regressions
concern_index.c ~ a1*q18_02_soc_media + a2*q02_age.c + a3*q01_gender + a4*q18_02_soc_media:q02_age.c + a5*q18_02_soc_media:q01_gender

PHQ8.c ~ c1*q18_02_soc_media + c2*q02_age.c + c3*q01_gender + c4*q18_02_soc_media:q02_age.c + c5*q18_02_soc_media:q01_gender + b1*concern_index.c + b2*concern_index.c:q02_age.c + b3*concern_index.c:q01_gender

#Mean and variance of age and gender moderators
q02_age.c ~ q02_age.c.mean*1
q02_age.c ~~ q02_age.c.var*q02_age.c
q01_gender ~ q01_gender.mean*1
q01_gender ~~ q01_gender.var*q01_gender

# Effect specifications
XonM := a1 + a4*q02_age.c.mean + a5*q01_gender.mean
MonY := b1 + b2*q02_age.c.mean + b3*q01_gender.mean
indirect := (a1 + a4*q02_age.c.mean + a5*q01_gender.mean)*(b1 + b2*q02_age.c.mean + b3*q01_gender.mean)
direct := c1 + c4*q02_age.c.mean + c5*q01_gender.mean
total := direct + indirect
prop.mediated := indirect / total

# Component effects conditional on moderators (X = Social Media, M = Concern, Y = Depression, W = Age, Z = Gender)
XonM.mean.male := a1 + a4*q02_age.c.mean + a5*1
XonM.mean.female := a1 + a4*q02_age.c.mean + a5*0

XonM.blw.male := a1 + a4*(q02_age.c.mean - sqrt(q02_age.c.var)) + a5*1
XonM.blw.female := a1 + a4*(q02_age.c.mean - sqrt(q02_age.c.var)) + a5*0
XonM.blw.avg := a1 + a4*(q02_age.c.mean - sqrt(q02_age.c.var)) + a5*q01_gender.mean

XonM.abv.male := a1 + a4*(q02_age.c.mean + sqrt(q02_age.c.var)) + a5*1
XonM.abv.female := a1 + a4*(q02_age.c.mean + sqrt(q02_age.c.var)) + a5*0
XonM.abv.avg := a1 + a4*(q02_age.c.mean + sqrt(q02_age.c.var)) + a5*q01_gender.mean

MonY.mean.male := b1 + b2*q02_age.c.mean + b3*1
MonY.mean.female := b1 + b2*q02_age.c.mean + b3*0

MonY.blw.male := b1 + b2*(q02_age.c.mean - sqrt(q02_age.c.var)) + b3*1
MonY.blw.female := b1 + b2*(q02_age.c.mean - sqrt(q02_age.c.var)) + b3*0
MonY.blw.avg := b1 + b2*(q02_age.c.mean - sqrt(q02_age.c.var)) + b3*q01_gender.mean

MonY.abv.male := b1 + b2*(q02_age.c.mean + sqrt(q02_age.c.var)) + b3*1
MonY.abv.female := b1 + b2*(q02_age.c.mean + sqrt(q02_age.c.var)) + b3*0
MonY.abv.avg := b1 + b2*(q02_age.c.mean + sqrt(q02_age.c.var)) + b3*q01_gender.mean

# Indirect effects conditional on moderators
indirect.mean.male := (a1 + a4*q02_age.c.mean + a5*1)*(b1 + b2*q02_age.c.mean + b3*1)
indirect.mean.female := (a1 + a4*q02_age.c.mean + a5*0)*(b1 + b2*q02_age.c.mean + b3*0)

indirect.blw.male := (a1 + a4*(q02_age.c.mean - sqrt(q02_age.c.var)) + a5*1)*(b1 + b2*(q02_age.c.mean - sqrt(q02_age.c.var)) + b3*1)
indirect.blw.female := (a1 + a4*(q02_age.c.mean - sqrt(q02_age.c.var)) + a5*0)*(b1 + b2*(q02_age.c.mean - sqrt(q02_age.c.var)) + b3*0)
indirect.blw.avg := (a1 + a4*(q02_age.c.mean - sqrt(q02_age.c.var)) + a5*q01_gender.mean)*(b1 + b2*(q02_age.c.mean - sqrt(q02_age.c.var)) + b3*q01_gender.mean)

indirect.abv.male := (a1 + a4*(q02_age.c.mean + sqrt(q02_age.c.var)) + a5*1)*(b1 + b2*(q02_age.c.mean + sqrt(q02_age.c.var)) + b3*1)
indirect.abv.female := (a1 + a4*(q02_age.c.mean + sqrt(q02_age.c.var)) + a5*0)*(b1 + b2*(q02_age.c.mean + sqrt(q02_age.c.var)) + b3*0)
indirect.abv.avg := (a1 + a4*(q02_age.c.mean + sqrt(q02_age.c.var)) + a5*q01_gender.mean)*(b1 + b2*(q02_age.c.mean + sqrt(q02_age.c.var)) + b3*q01_gender.mean)

# Direct effects conditional on moderators
direct.mean.male := c1 + c4*q02_age.c.mean + c5*1
direct.mean.female := c1 + c4*q02_age.c.mean + c5*0

direct.blw.male := c1 + c4*(q02_age.c.mean - sqrt(q02_age.c.var)) + c5*1
direct.blw.female := c1 + c4*(q02_age.c.mean - sqrt(q02_age.c.var)) + c5*0
direct.blw.avg := c1 + c4*(q02_age.c.mean - sqrt(q02_age.c.var)) + c5*q01_gender.mean

direct.abv.male := c1 + c4*(q02_age.c.mean + sqrt(q02_age.c.var)) + c5*1
direct.abv.female := c1 + c4*(q02_age.c.mean + sqrt(q02_age.c.var)) + c5*0
direct.abv.avg := c1 + c4*(q02_age.c.mean + sqrt(q02_age.c.var)) + c5*q01_gender.mean

# Total effects conditional on moderators
total.mean.male := direct.mean.male + indirect.mean.male
total.mean.female := direct.mean.female + indirect.mean.female

total.blw.male := direct.blw.male + indirect.blw.male
total.blw.female := direct.blw.female + indirect.blw.female
total.blw.avg := direct.blw.avg + indirect.blw.avg

total.abv.male := direct.abv.male + indirect.abv.male
total.abv.female := direct.abv.female + indirect.abv.female
total.abv.avg := direct.abv.avg + indirect.abv.avg

# Proportion mediated conditional on moderators
prop.med.mean.male := indirect.mean.male / total.mean.male
prop.med.mean.female := indirect.mean.female / total.mean.female

prop.med.blw.male := indirect.blw.male / total.blw.male
prop.med.blw.female := indirect.blw.female / total.blw.female
prop.med.blw.avg := indirect.blw.avg / total.blw.avg

prop.med.abv.male := indirect.abv.male / total.abv.male
prop.med.abv.female := indirect.abv.female / total.abv.male
prop.med.abv.avg := indirect.abv.avg / total.abv.avg"

# For reproducibility of results (using bootstrap)
set.seed(2021)

# Secondly, we fit/estimate the model and we use bootstrap for robustness.
fit_mod <- lavaan::sem(model = spec_mod,
               data = data_sem,
               se = "bootstrap",
               bootstrap = 1000)

# Labels for statistical diagrams
labels_stats_H76 <- list(X = "q18_02_soc_media",
                         M = "concern_index.c",
                         Y = "PHQ8.c",
                         W = "q02_age.c",
                         Z = "q01_gender")

5.2.1 Path analysis model summary, estimates and statistical diagram

5.2.1.1 Diagram with unstandardized coefficients

statisticalDiagram(76,
                   labels = labels_stats_H76,
                   fit = fit_mod,
                   whatLabel = "est",
                   xmargin = 0.01,
                   rady = 0.03,
                   radx = 0.158,
                   ylim = c(0.06, 0.95),
                   xlim = c(0.01, 1))

5.2.1.2 Diagram with standardized coefficients

statisticalDiagram(76,
                   labels = labels_stats_H76,
                   fit = fit_mod,
                   whatLabel = "std",
                   xmargin = 0.01,
                   rady = 0.03,
                   radx = 0.158,
                   ylim = c(0.06, 0.95),
                   xlim = c(0.01, 1))

5.2.1.3 Detailed model summary

lavaan::summary(fit_mod, 
                rsquare = TRUE, 
                ci = TRUE,
                fit.measures = TRUE,
                standardize = TRUE)
lavaan 0.6-9 ended normally after 40 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        21
                                                      
  Number of observations                          1482
                                                      
Model Test User Model:
                                                      
  Test statistic                              1543.409
  Degrees of freedom                                13
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1866.058
  Degrees of freedom                                26
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.168
  Tucker-Lewis Index (TLI)                      -0.663

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -7077.817
  Loglikelihood unrestricted model (H1)      -6306.112
                                                      
  Akaike (AIC)                               14197.634
  Bayesian (BIC)                             14308.958
  Sample-size adjusted Bayesian (BIC)        14242.247

Root Mean Square Error of Approximation:

  RMSEA                                          0.282
  90 Percent confidence interval - lower         0.270
  90 Percent confidence interval - upper         0.294
  P-value RMSEA <= 0.05                          0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.139

Parameter Estimates:

  Standard errors                            Bootstrap
  Number of requested bootstrap draws             1000
  Number of successful bootstrap draws            1000

Regressions:
                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
  concern_index.c ~                                                      
    q18_02_s_ (a1)    -0.029    0.087   -0.333    0.739   -0.198    0.153
    q02_age.c (a2)     0.004    0.030    0.131    0.896   -0.053    0.066
    q01_gendr (a3)    -0.171    0.067   -2.567    0.010   -0.307   -0.040
    q18_02__: (a4)    -0.110    0.078   -1.408    0.159   -0.264    0.047
    q18_02__: (a5)     0.146    0.125    1.169    0.243   -0.102    0.388
  PHQ8.c ~                                                               
    q18_02_s_ (c1)     0.083    0.068    1.218    0.223   -0.050    0.218
    q02_age.c (c2)    -0.260    0.028   -9.443    0.000   -0.313   -0.205
    q01_gendr (c3)    -0.244    0.063   -3.870    0.000   -0.376   -0.120
    q18_02__: (c4)    -0.153    0.062   -2.473    0.013   -0.272   -0.029
    q18_02__: (c5)     0.072    0.120    0.604    0.546   -0.158    0.316
    cncrn_nd. (b1)     0.242    0.029    8.219    0.000    0.183    0.299
    cn_.:02_. (b2)     0.006    0.027    0.218    0.828   -0.045    0.058
    cnc_.:01_ (b3)     0.081    0.057    1.422    0.155   -0.038    0.192
   Std.lv  Std.all
                  
   -0.029   -0.013
    0.004    0.004
   -0.171   -0.078
   -0.110   -0.052
    0.146    0.040
                  
    0.083    0.038
   -0.260   -0.264
   -0.244   -0.112
   -0.153   -0.073
    0.072    0.020
    0.242    0.246
    0.006    0.006
    0.081    0.043

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
    q02_g.c (q02_)   -0.000    0.026   -0.000    1.000   -0.052    0.050
    q01_gnd (q01_)    0.290    0.012   24.228    0.000    0.267    0.314
   .cncrn_.           0.028    0.037    0.772    0.440   -0.043    0.100
   .PHQ8.c            0.020    0.033    0.601    0.548   -0.045    0.083
   Std.lv  Std.all
   -0.000   -0.000
    0.290    0.639
    0.028    0.028
    0.020    0.020

Variances:
                   Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
    q02_g.c (q02_)    0.999    0.021   46.973    0.000    0.956    1.040
    q01_gnd (q01_)    0.206    0.005   40.869    0.000    0.195    0.215
   .cncrn_.           0.992    0.034   29.181    0.000    0.923    1.057
   .PHQ8.c            0.810    0.025   31.751    0.000    0.757    0.855
   Std.lv  Std.all
    0.999    1.000
    0.206    1.000
    0.992    0.989
    0.810    0.836

R-Square:
                   Estimate
    concern_indx.c    0.011
    PHQ8.c            0.164

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
    XonM              0.013    0.080    0.168    0.866   -0.143    0.173
    MonY              0.265    0.025   10.780    0.000    0.218    0.315
    indirect          0.004    0.021    0.167    0.867   -0.038    0.047
    direct            0.103    0.062    1.675    0.094   -0.021    0.218
    total             0.107    0.065    1.640    0.101   -0.027    0.228
    prop.mediated     0.033    8.497    0.004    0.997   -1.117    1.141
    XonM.mean.male    0.117    0.119    0.986    0.324   -0.132    0.358
    XonM.mean.feml   -0.029    0.088   -0.332    0.740   -0.199    0.153
    XonM.blw.male     0.228    0.108    2.110    0.035    0.027    0.439
    XonM.blw.femal    0.081    0.081    1.009    0.313   -0.075    0.248
    XonM.blw.avg      0.124    0.069    1.797    0.072   -0.008    0.264
    XonM.abv.male     0.007    0.170    0.041    0.967   -0.337    0.357
    XonM.abv.femal   -0.139    0.145   -0.960    0.337   -0.428    0.153
    XonM.abv.avg     -0.097    0.142   -0.682    0.495   -0.372    0.197
    MonY.mean.male    0.323    0.048    6.734    0.000    0.227    0.415
    MonY.mean.feml    0.242    0.029    8.224    0.000    0.184    0.300
    MonY.blw.male     0.317    0.051    6.166    0.000    0.217    0.422
    MonY.blw.femal    0.236    0.043    5.512    0.000    0.149    0.323
    MonY.blw.avg      0.260    0.037    6.959    0.000    0.186    0.330
    MonY.abv.male     0.329    0.058    5.672    0.000    0.208    0.432
    MonY.abv.femal    0.247    0.036    6.858    0.000    0.174    0.317
    MonY.abv.avg      0.271    0.035    7.741    0.000    0.196    0.339
    indirect.mn.ml    0.038    0.040    0.956    0.339   -0.041    0.121
    indirct.mn.fml   -0.007    0.021   -0.330    0.741   -0.049    0.037
    indirct.blw.ml    0.072    0.037    1.973    0.049    0.009    0.148
    indrct.blw.fml    0.019    0.020    0.980    0.327   -0.018    0.061
    indirct.blw.vg    0.032    0.019    1.727    0.084   -0.002    0.070
    indirect.bv.ml    0.002    0.057    0.040    0.968   -0.117    0.124
    indirct.bv.fml   -0.035    0.037   -0.941    0.346   -0.106    0.034
    indirect.bv.vg   -0.026    0.039   -0.672    0.501   -0.099    0.056
    direct.mean.ml    0.155    0.110    1.402    0.161   -0.059    0.369
    direct.men.fml    0.083    0.068    1.220    0.222   -0.053    0.220
    direct.blw.mal    0.308    0.108    2.845    0.004    0.100    0.532
    direct.blw.fml    0.236    0.074    3.168    0.002    0.094    0.381
    direct.blw.avg    0.257    0.066    3.878    0.000    0.127    0.387
    direct.abv.mal    0.001    0.143    0.010    0.992   -0.284    0.281
    direct.abv.fml   -0.071    0.106   -0.666    0.506   -0.286    0.143
    direct.abv.avg   -0.050    0.105   -0.476    0.634   -0.272    0.160
    total.mean.mal    0.193    0.116    1.658    0.097   -0.029    0.416
    total.mean.fml    0.075    0.071    1.069    0.285   -0.072    0.207
    total.blw.male    0.380    0.110    3.448    0.001    0.172    0.609
    total.blw.feml    0.255    0.077    3.315    0.001    0.105    0.405
    total.blw.avg     0.289    0.068    4.230    0.000    0.155    0.423
    total.abv.male    0.004    0.156    0.024    0.981   -0.293    0.305
    total.abv.feml   -0.105    0.113   -0.936    0.349   -0.326    0.136
    total.abv.avg    -0.076    0.113   -0.676    0.499   -0.305    0.158
    prop.med.mn.ml    0.197    2.994    0.066    0.948   -1.243    1.394
    prop.md.mn.fml   -0.093  130.215   -0.001    0.999   -2.985    2.407
    prop.md.blw.ml    0.190    0.127    1.501    0.133    0.023    0.490
    prp.md.blw.fml    0.075    0.099    0.756    0.450   -0.091    0.275
    prop.md.blw.vg    0.111    0.152    0.733    0.463   -0.009    0.285
    prop.med.bv.ml    0.612    7.680    0.080    0.937   -5.490    4.844
    prop.md.bv.fml   -9.224   17.314   -0.533    0.594   -4.765    4.681
    prop.med.bv.vg    0.345 1092.623    0.000    1.000   -3.647    3.689
   Std.lv  Std.all
    0.013    0.013
    0.265    0.273
    0.004    0.003
    0.103    0.050
    0.107    0.054
    0.033    0.064
    0.117    0.027
   -0.029   -0.013
    0.228    0.079
    0.081    0.039
    0.124    0.064
    0.007   -0.025
   -0.139   -0.065
   -0.097   -0.039
    0.323    0.289
    0.242    0.246
    0.317    0.283
    0.236    0.240
    0.260    0.267
    0.329    0.294
    0.247    0.252
    0.271    0.279
    0.038    0.008
   -0.007   -0.003
    0.072    0.022
    0.019    0.009
    0.032    0.017
    0.002   -0.007
   -0.035   -0.016
   -0.026   -0.011
    0.155    0.058
    0.083    0.038
    0.308    0.131
    0.236    0.111
    0.257    0.124
    0.001   -0.016
   -0.071   -0.036
   -0.050   -0.023
    0.193    0.065
    0.075    0.034
    0.380    0.153
    0.255    0.120
    0.289    0.141
    0.004   -0.023
   -0.105   -0.052
   -0.076   -0.034
    0.197    0.119
   -0.093   -0.093
    0.190    0.145
    0.075    0.078
    0.111    0.122
    0.612    0.318
   -9.224    0.710
    0.345    0.323

5.2.1.4 Table of model estimates

estimates <- parameterEstimates(fit_mod, standardized = TRUE) %>% 
                    filter(op == "~") %>% 
                    select(-c(std.nox))

p_adj <- p.adjust(estimates$pvalue, method = "holm")

estimates <- cbind(estimates, p_adj)

kableExtra::kbl(estimates) %>%
kableExtra::kable_classic(full_width = FALSE, lightable_options = c("striped")) %>%
                    kableExtra::row_spec(which(estimates$p_adj < 0.05), bold = TRUE)
lhs op rhs label est se z pvalue ci.lower ci.upper std.lv std.all p_adj
concern_index.c ~ q18_02_soc_media a1 -0.029 0.087 -0.333 0.739 -0.198 0.153 -0.029 -0.013 1.000
concern_index.c ~ q02_age.c a2 0.004 0.030 0.131 0.896 -0.053 0.066 0.004 0.004 1.000
concern_index.c ~ q01_gender a3 -0.171 0.067 -2.567 0.010 -0.307 -0.040 -0.171 -0.078 0.103
concern_index.c ~ q18_02_soc_media:q02_age.c a4 -0.110 0.078 -1.408 0.159 -0.264 0.047 -0.110 -0.052 1.000
concern_index.c ~ q18_02_soc_media:q01_gender a5 0.146 0.125 1.169 0.243 -0.102 0.388 0.146 0.040 1.000
PHQ8.c ~ q18_02_soc_media c1 0.083 0.068 1.218 0.223 -0.050 0.218 0.083 0.038 1.000
PHQ8.c ~ q02_age.c c2 -0.260 0.028 -9.443 0.000 -0.313 -0.205 -0.260 -0.264 0.000
PHQ8.c ~ q01_gender c3 -0.244 0.063 -3.870 0.000 -0.376 -0.120 -0.244 -0.112 0.001
PHQ8.c ~ q18_02_soc_media:q02_age.c c4 -0.153 0.062 -2.473 0.013 -0.272 -0.029 -0.153 -0.073 0.120
PHQ8.c ~ q18_02_soc_media:q01_gender c5 0.072 0.120 0.604 0.546 -0.158 0.316 0.072 0.020 1.000
PHQ8.c ~ concern_index.c b1 0.242 0.029 8.219 0.000 0.183 0.299 0.242 0.246 0.000
PHQ8.c ~ concern_index.c:q02_age.c b2 0.006 0.027 0.218 0.828 -0.045 0.058 0.006 0.006 1.000
PHQ8.c ~ concern_index.c:q01_gender b3 0.081 0.057 1.422 0.155 -0.038 0.192 0.081 0.043 1.000

5.2.1.5 Table of defined parameters

parameters <- parameterEstimates(fit_mod, standardized = TRUE) %>% 
                    filter(op == ":=") %>% 
                    select(-c(op, lhs, rhs, std.nox))

p_adj <- p.adjust(parameters$pvalue, method = "holm")

parameters <- cbind(parameters, p_adj)

kableExtra::kbl(parameters) %>%
kableExtra::kable_classic(full_width = FALSE, lightable_options = c("striped")) %>%
                    kableExtra::row_spec(which(parameters$p_adj < 0.05), bold = TRUE)
label est se z pvalue ci.lower ci.upper std.lv std.all p_adj
XonM 0.013 0.080 0.168 0.866 -0.143 0.173 0.013 0.013 1.000
MonY 0.265 0.025 10.780 0.000 0.218 0.315 0.265 0.273 0.000
indirect 0.004 0.021 0.167 0.867 -0.038 0.047 0.004 0.003 1.000
direct 0.103 0.062 1.675 0.094 -0.021 0.218 0.103 0.050 1.000
total 0.107 0.065 1.640 0.101 -0.027 0.228 0.107 0.054 1.000
prop.mediated 0.033 8.497 0.004 0.997 -1.117 1.141 0.033 0.064 1.000
XonM.mean.male 0.117 0.119 0.986 0.324 -0.132 0.358 0.117 0.027 1.000
XonM.mean.female -0.029 0.088 -0.332 0.740 -0.199 0.153 -0.029 -0.013 1.000
XonM.blw.male 0.228 0.108 2.110 0.035 0.027 0.439 0.228 0.079 1.000
XonM.blw.female 0.081 0.081 1.009 0.313 -0.075 0.248 0.081 0.039 1.000
XonM.blw.avg 0.124 0.069 1.797 0.072 -0.008 0.264 0.124 0.064 1.000
XonM.abv.male 0.007 0.170 0.041 0.967 -0.337 0.357 0.007 -0.025 1.000
XonM.abv.female -0.139 0.145 -0.960 0.337 -0.428 0.153 -0.139 -0.065 1.000
XonM.abv.avg -0.097 0.142 -0.682 0.495 -0.372 0.197 -0.097 -0.039 1.000
MonY.mean.male 0.323 0.048 6.734 0.000 0.227 0.415 0.323 0.289 0.000
MonY.mean.female 0.242 0.029 8.224 0.000 0.184 0.300 0.242 0.246 0.000
MonY.blw.male 0.317 0.051 6.166 0.000 0.217 0.422 0.317 0.283 0.000
MonY.blw.female 0.236 0.043 5.512 0.000 0.149 0.323 0.236 0.240 0.000
MonY.blw.avg 0.260 0.037 6.959 0.000 0.186 0.330 0.260 0.267 0.000
MonY.abv.male 0.329 0.058 5.672 0.000 0.208 0.432 0.329 0.294 0.000
MonY.abv.female 0.247 0.036 6.858 0.000 0.174 0.317 0.247 0.252 0.000
MonY.abv.avg 0.271 0.035 7.741 0.000 0.196 0.339 0.271 0.279 0.000
indirect.mean.male 0.038 0.040 0.956 0.339 -0.041 0.121 0.038 0.008 1.000
indirect.mean.female -0.007 0.021 -0.330 0.741 -0.049 0.037 -0.007 -0.003 1.000
indirect.blw.male 0.072 0.037 1.973 0.049 0.009 0.148 0.072 0.022 1.000
indirect.blw.female 0.019 0.020 0.980 0.327 -0.018 0.061 0.019 0.009 1.000
indirect.blw.avg 0.032 0.019 1.727 0.084 -0.002 0.070 0.032 0.017 1.000
indirect.abv.male 0.002 0.057 0.040 0.968 -0.117 0.124 0.002 -0.007 1.000
indirect.abv.female -0.035 0.037 -0.941 0.346 -0.106 0.034 -0.035 -0.016 1.000
indirect.abv.avg -0.026 0.039 -0.672 0.501 -0.099 0.056 -0.026 -0.011 1.000
direct.mean.male 0.155 0.110 1.402 0.161 -0.059 0.369 0.155 0.058 1.000
direct.mean.female 0.083 0.068 1.220 0.222 -0.053 0.220 0.083 0.038 1.000
direct.blw.male 0.308 0.108 2.845 0.004 0.100 0.532 0.308 0.131 0.177
direct.blw.female 0.236 0.074 3.168 0.002 0.094 0.381 0.236 0.111 0.063
direct.blw.avg 0.257 0.066 3.878 0.000 0.127 0.387 0.257 0.124 0.005
direct.abv.male 0.001 0.143 0.010 0.992 -0.284 0.281 0.001 -0.016 1.000
direct.abv.female -0.071 0.106 -0.666 0.506 -0.286 0.143 -0.071 -0.036 1.000
direct.abv.avg -0.050 0.105 -0.476 0.634 -0.272 0.160 -0.050 -0.023 1.000
total.mean.male 0.193 0.116 1.658 0.097 -0.029 0.416 0.193 0.065 1.000
total.mean.female 0.075 0.071 1.069 0.285 -0.072 0.207 0.075 0.034 1.000
total.blw.male 0.380 0.110 3.448 0.001 0.172 0.609 0.380 0.153 0.024
total.blw.female 0.255 0.077 3.315 0.001 0.105 0.405 0.255 0.120 0.038
total.blw.avg 0.289 0.068 4.230 0.000 0.155 0.423 0.289 0.141 0.001
total.abv.male 0.004 0.156 0.024 0.981 -0.293 0.305 0.004 -0.023 1.000
total.abv.female -0.105 0.113 -0.936 0.349 -0.326 0.136 -0.105 -0.052 1.000
total.abv.avg -0.076 0.113 -0.676 0.499 -0.305 0.158 -0.076 -0.034 1.000
prop.med.mean.male 0.197 2.994 0.066 0.948 -1.243 1.394 0.197 0.119 1.000
prop.med.mean.female -0.093 130.215 -0.001 0.999 -2.985 2.407 -0.093 -0.093 1.000
prop.med.blw.male 0.190 0.127 1.501 0.133 0.023 0.490 0.190 0.145 1.000
prop.med.blw.female 0.075 0.099 0.756 0.450 -0.091 0.275 0.075 0.078 1.000
prop.med.blw.avg 0.111 0.152 0.733 0.463 -0.009 0.285 0.111 0.122 1.000
prop.med.abv.male 0.612 7.680 0.080 0.937 -5.490 4.844 0.612 0.318 1.000
prop.med.abv.female -9.224 17.314 -0.533 0.594 -4.765 4.681 -9.224 0.710 1.000
prop.med.abv.avg 0.345 1092.623 0.000 1.000 -3.647 3.689 0.345 0.323 1.000

6 Visualizing the qualitative responses using Word Clouds

Part of the survey, q50_comment, was dedicated to the comments of the respondents on their situation. To visualize this textual data, we use two pairs of two word clouds. Unfortunately, this survey item was used only in the Czech version of the survey.

6.1 Word Clouds of tokens and lemma

First Word Cloud pair visualizes the most common tokens and lemma (size and color represents frequency of the word).

# Remove stop words - first, we load the public stop word list
stop_words_cz <- read_csv(
  "https://raw.githubusercontent.com/stopwords-iso/stopwords-cs/master/stopwords-cs.txt", 
  col_names = "word")
   
# Should the above link become obsolete, alternative source can be reached 
#  using "stopwords" library:
#  stop_words_cz <- as_tibble_col(stopwords::stopwords("cs", 
#                                                      source = "stopwords-iso"), 
#                                                      column_name = "word")

# Reshape the data frame into one column called "word"
tidy_dat <- gather(dplyr::as_tibble(data$q50_comment), key, word) %>% 
            dplyr::select(word)

# STEP 1: Tokenization of the q50 responses

# Tokenize - one word per row of a dataframe/tibble
tokens <- tidy_dat %>%
          unnest_tokens(word, word) %>%
          dplyr::count(word, sort = TRUE) %>%
          ungroup()
                       
# Removing stop words by using anti_join() applied on the stop words list
tokens_clean <- tokens %>%
                anti_join(stop_words_cz)

# Next, we remove numbers (optional step)
nums <- tokens_clean %>% 
        dplyr::filter(str_detect(word, "^[0-9]")) %>% 
        dplyr::select(word) %>% 
        unique()

tokens_clean <- tokens_clean %>% 
                anti_join(nums, by = "word")

#  We can also remove unique stop words that are still present (optional step)
uni_sw <- data.frame(word = c("např"))

tokens_clean <- tokens_clean %>% 
                anti_join(uni_sw, by = "word")

# Define a color palette for the Word Cloud
palette <- brewer.pal(8, "Dark2")

# STEP 2: Lemmatization of tokens, using udpipe package

# Creation of uncounted tokens table
tokens_uncounted <- tidy_dat %>%
                    unnest_tokens(word, word)

# Fitting the udpipe model with downloaded Czech model

udpipe_tokens_lemma <- udpipe(x = tokens_uncounted$word, object = "czech-pdt")

# Extracting resulting lemma column from the model, counting frequency 
tidy_dat_lemma <- udpipe_tokens_lemma %>% 
                  select(lemma) %>% 
                  rename(word = lemma) %>% 
                  dplyr::count(word, sort = TRUE)

# Removing stop words by using anti_join() applied on the stop words list
tokens_clean_lemma <- tidy_dat_lemma %>%
                      anti_join(stop_words_cz)

# Next, we remove numbers (optional step)
nums_lemma <- tokens_clean_lemma %>% 
              dplyr::filter(str_detect(word, "^[0-9]")) %>% 
              dplyr::select(word) %>% 
              unique()

tokens_clean_lemma <- tokens_clean_lemma %>% 
                      anti_join(nums_lemma, by = "word")

#  We can also remove unique stop words that are still present (optional step)
uniq_lemma <- tibble(word = c(NA))
tokens_clean_lemma <- tokens_clean_lemma %>% 
                      anti_join(uniq_lemma, by = "word")

6.1.1 Word Clouds tokens & lemma

6.1.1.1 Word Cloud of tokens

set.seed(2021)
tokens_clean %>% with(wordcloud(word, 
                                n, 
                                random.order = FALSE,
                                scale = c(7,.5), 
                                min.freq = 1, 
                                max.words = 100, 
                                colors = palette))

6.1.1.2 Word Cloud of lemma

set.seed(2021)
tokens_clean_lemma %>% with(wordcloud(word,
                                      n, 
                                      random.order = FALSE, 
                                      scale = c(11,.7), 
                                      min.freq = 1, 
                                      max.words = 100, 
                                      colors = palette))

6.2 Word Clouds with applied sentiment analysis

Second Word Cloud pair uses sentiment analysis technique to create two distinct word clouds (using only lemma, not tokens), one visualizes only words with positive emotional sentiment, while the second only words with negative sentiment.

# First, we load Czech Subjectivity Lexicon from ÚFAL MFF, which assesses 
#  sentiment for every word as positive or negative

lindat_repository <- "https://lindat.mff.cuni.cz/repository/"
lindat_path <- "xmlui/bitstream/handle/11858/00-097C-0000-0022-FF60-B/"
lindat_file_name <- "sublex_1_0.csv?sequence=1&isAllowed=y"

sentiment_cz <- read_delim(paste0(lindat_repository, lindat_path, lindat_file_name),
                           "\t", 
                           escape_double = FALSE, 
                           col_names = FALSE, 
                           trim_ws = TRUE) %>% 
                           rename("word" = "X3", "sentiment" = "X4")
# Remove extra symbols
sentiment_cz$word <- str_remove(sentiment_cz$word, pattern = "_.*")

# Next, we create tidy tibble with tokens created in the previous section 
#  and we use inner_join function to separately save only 
#  the tokens with positive and negative valency
tokens_sentiment_positive <- tokens_clean_lemma %>% 
                             inner_join(sentiment_cz %>% 
                             filter(sentiment == "POS")) %>% 
                             transmute(word, n) %>% 
                             arrange(desc(n))

tokens_sentiment_negative <- tokens_clean_lemma %>% 
                             inner_join(sentiment_cz %>% 
                             filter(sentiment == "NEG")) %>% 
                             transmute(word, n) %>% 
                             arrange(desc(n))

6.2.1 Word Clouds separated by sentiment valency

6.2.1.1 Positive valency words

set.seed(2021)
tokens_sentiment_positive %>% with(wordcloud(word,
                                             n, 
                                             random.order = FALSE, 
                                             scale = c(2, 3.5), 
                                             max.words = 45,
                                             min.freq = 1,
                                             colors = palette))

6.2.1.2 Negative valency words

set.seed(2021)
tokens_sentiment_negative %>% with(wordcloud(word,
                                             n, 
                                             random.order = FALSE, 
                                             scale = c(2, 3.5), 
                                             max.words = 45, 
                                             min.freq = 1,
                                             colors = palette))

Bibliography

Ambresin, G., P. Chondros, C. Dowrick, H. Herrman, and J. M. Gunn. 2014. “Self-Rated Health and Long-Term Prognosis of Depression.” The Annals of Family Medicine 12 (1): 57–65. https://doi.org/10.1370/afm.1562.
Awaworyi Churchill, S., and L. Farrell. 2017. “Alcohol and Depression: Evidence from the 2014 Health Survey for England.” Drug and Alcohol Dependence 180 (November): 86–92. https://doi.org/10.1016/j.drugalcdep.2017.08.006.
Bendau, Antonia, Moritz Bruno Petzold, Lena Pyrkosch, Lea Mascarell Maricic, Felix Betzler, Janina Rogoll, Julia Große, Andreas Ströhle, and Jens Plag. 2020. Associations between COVID-19 related media consumption and symptoms of anxiety, depression and COVID-19 related fear in the general population in Germany.” European Archives of Psychiatry and Clinical Neuroscience 1 (July): 3. https://doi.org/10.1007/s00406-020-01171-6.
Cabrera-Nguyen, Peter. 2010. “Author Guidelines for Reporting Scale Development and Validation Results in the Journal of the Society for Social Work and Research.” Journal of the Society for Social Work and Research 1 (2): 99–103. https://doi.org/10.5243/jsswr.2010.8.
Carstensen, L. L. 2006. “The Influence of a Sense of Time on Human Development.” Science 312 (5782): 1913–15. https://doi.org/10.1126/science.1127488.
Dhir, Amandeep, Yossiri Yossatorn, Puneet Kaur, and Sufen Chen. 2018. Online social media fatigue and psychological wellbeing—A study of compulsive use, fear of missing out, fatigue, anxiety and depression.” International Journal of Information Management 40 (June): 141–52. https://doi.org/10.1016/j.ijinfomgt.2018.01.012.
Gloster, Andrew T., Demetris Lamnisos, Jelena Lubenko, Giovambattista Presti, Valeria Squatrito, Marios Constantinou, Christiana Nicolaou, et al. 2020. Impact of COVID-19 pandemic on mental health: An international study.” Edited by Joel Msafiri Francis. PLOS ONE 15 (12): e0244809. https://doi.org/10.1371/journal.pone.0244809.
González-Sanguino, Clara, Berta Ausín, Miguel Ángel Castellanos, Jesús Saiz, Aída López-Gómez, Carolina Ugidos, and Manuel Muñoz. 2020. “Mental Health Consequences During the Initial Stage of the 2020 Coronavirus Pandemic (COVID-19) in Spain.” Brain, Behavior, and Immunity 87 (July): 172–76. https://doi.org/10.1016/j.bbi.2020.05.040.
Harvey, Samuel B., Simon Øverland, Stephani L. Hatch, Simon Wessely, Arnstein Mykletun, and Matthew Hotopf. 2018. “Exercise and the Prevention of Depression: Results of the HUNT Cohort Study.” American Journal of Psychiatry 175 (1): 28–36. https://doi.org/10.1176/appi.ajp.2017.16111223.
Hossain, Md. Tanvir, Benojir Ahammed, Sanjoy Kumar Chanda, Nusrat Jahan, Mahfuza Zaman Ela, and Md. Nazrul Islam. 2020. “Social and Electronic Media Exposure and Generalized Anxiety Disorder Among People During COVID-19 Outbreak in Bangladesh: A Preliminary Observation.” Edited by Amir H. Pakpour. PLOS ONE 15 (9): e0238974. https://doi.org/10.1371/journal.pone.0238974.
Jacob, Louis, Josep Maria Haro, and Ai Koyanagi. 2019. “Relationship Between Living Alone and Common Mental Disorders in the 1993, 2000 and 2007 National Psychiatric Morbidity Surveys.” Edited by Soraya Seedat. PLOS ONE 14 (5): e0215182. https://doi.org/10.1371/journal.pone.0215182.
Kowal, Marta, Tao Coll‐Martín, Gözde Ikizer, Jesper Rasmussen, Kristina Eichel, Anna Studzińska, Karolina Koszałkowska, et al. 2020. Who is the Most Stressed During the COVID‐19 Pandemic? Data From 26 Countries and Areas.” Applied Psychology: Health and Well-Being 12 (4): 946–66. https://doi.org/10.1111/aphw.12234.
Kroenke, Kurt, Tara W. Strine, Robert L. Spitzer, Janet B. W. Williams, Joyce T. Berry, and Ali H. Mokdad. 2009. The PHQ-8 as a measure of current depression in the general population.” Journal of Affective Disorders 114 (1-3): 163–73. https://doi.org/10.1016/j.jad.2008.06.026.
Krogh, Jesper, Carsten Hjorthøj, Helene Speyer, Christian Gluud, and Merete Nordentoft. 2017. Exercise for patients with major depression: A systematic review with meta-analysis and trial sequential analysis.” BMJ Open 7 (9): e014820. https://doi.org/10.1136/bmjopen-2016-014820.
Kvam, Siri, Catrine Lykkedrang Kleppe, Inger Hilde Nordhus, and Anders Hovland. 2016. Exercise as a treatment for depression: A meta-analysis.” Elsevier B.V. https://doi.org/10.1016/j.jad.2016.03.063.
Losada-Baltar, Andrés, Lucía Jiménez-Gonzalo, Laura Gallego-Alberto, María del Sequeros Pedroso-Chaparro, José Fernandes-Pires, and María Márquez-González. 2020. We Are Staying at Home. Association of Self-Perceptions of Aging, Personal and Family Resources, and Loneliness With Psychological Distress During the Lock-Down Period of COVID-19.” Edited by Derek Issacowitz. The Journals of Gerontology: Series B 76 (2): e10–16. https://doi.org/10.1093/geronb/gbaa048.
Luo, Min, Lixia Guo, Mingzhou Yu, Wenying Jiang, and Haiyan Wang. 2020. “The Psychological and Mental Impact of Coronavirus Disease 2019 (COVID-19) on Medical Staff and General Public A Systematic Review and Meta-Analysis.” Psychiatry Research 291 (September): 113190. https://doi.org/10.1016/j.psychres.2020.113190.
Meltzer, H., P. Bebbington, T. Brugha, R. Jenkins, S. McManus, and S. Stansfeld. 2009. “Job Insecurity, Socio-Economic Circumstances and Depression.” Psychological Medicine 40 (8): 1401–7. https://doi.org/10.1017/s0033291709991802.
Mertens, Gaëtan, Lotte Gerritsen, Stefanie Duijndam, Elske Salemink, and Iris M. Engelhard. 2020. “Fear of the Coronavirus (COVID-19): Predictors in an Online Study Conducted in March 2020.” Journal of Anxiety Disorders 74 (August): 102258. https://doi.org/10.1016/j.janxdis.2020.102258.
Primack, Brian A., Ariel Shensa, César G. Escobar-Viera, Erica L. Barrett, Jaime E. Sidani, Jason B. Colditz, and A. Everette James. 2017. Use of multiple social media platforms and symptoms of depression and anxiety: A nationally-representative study among U.S. young adults.” Computers in Human Behavior 69 (April): 1–9. https://doi.org/10.1016/j.chb.2016.11.013.
Rasmussen, Eric E., Narissra Punyanunt-Carter, Jenna R. LaFreniere, Mary S. Norman, and Thomas G. Kimball. 2020. “The Serially Mediated Relationship Between Emerging Adults Social Media Use and Mental Well-Being.” Computers in Human Behavior 102 (January): 206–13. https://doi.org/10.1016/j.chb.2019.08.019.
Salk, Rachel H., Janet S. Hyde, and Lyn Y. Abramson. 2017. Gender differences in depression in representative national samples: Meta-analyses of diagnoses and symptoms.” Psychological Bulletin 143 (8): 783–822. https://doi.org/10.1037/bul0000102.
Schuch, Felipe B., Davy Vancampfort, Justin Richards, Simon Rosenbaum, Philip B. Ward, and Brendon Stubbs. 2016. Exercise as a treatment for depression: A meta-analysis adjusting for publication bias.” Journal of Psychiatric Research 77 (June): 42–51. https://doi.org/10.1016/j.jpsychires.2016.02.023.
Shevlin, Mark, Orla McBride, Jamie Murphy, Jilly Gibson Miller, Todd K. Hartman, Liat Levita, Liam Mason, et al. 2020. “Anxiety, Depression, Traumatic Stress and COVID-19-Related Anxiety in the UK General Population During the COVID-19 Pandemic.” BJPsych Open 6 (6). https://doi.org/10.1192/bjo.2020.109.
Stanca, Luca. 2012. “Suffer the Little Children: Measuring the Effects of Parenthood on Well-Being Worldwide.” Journal of Economic Behavior & Organization 81 (3): 742–50. https://doi.org/10.1016/j.jebo.2010.12.019.
Stanton, Robert, Quyen G. To, Saman Khalesi, Susan L. Williams, Stephanie J. Alley, Tanya L. Thwaite, Andrew S. Fenning, and Corneel Vandelanotte. 2020. “Depression, Anxiety and Stress During COVID-19: Associations with Changes in Physical Activity, Sleep, Tobacco and Alcohol Use in Australian Adults.” International Journal of Environmental Research and Public Health 17 (11): 4065. https://doi.org/10.3390/ijerph17114065.
Stubbs, Brendon, Davy Vancampfort, Mats Hallgren, Joseph Firth, Nicola Veronese, Marco Solmi, Serge Brand, et al. 2018. EPA guidance on physical activity as a treatment for severe mental illness: a meta-review of the evidence and Position Statement from the European Psychiatric Association (EPA), supported by the International Organization of Physical Therapists in Mental Health (IOPTMH).” European Psychiatry 54 (October): 124–44. https://doi.org/10.1016/j.eurpsy.2018.07.004.
Taylor, Melanie R, Kingsley E Agho, Garry J Stevens, and Beverley Raphael. 2008. “Factors Influencing Psychological Distress During a Disease Epidemic: Data from Australia’s First Outbreak of Equine Influenza.” BMC Public Health 8 (1). https://doi.org/10.1186/1471-2458-8-347.
Tull, Matthew T., Keith A. Edmonds, Kayla M. Scamaldo, Julia R. Richmond, Jason P. Rose, and Kim L. Gratz. 2020. “Psychological Outcomes Associated with Stay-at-Home Orders and the Perceived Impact of COVID-19 on Daily Life.” Psychiatry Research 289 (July): 113098. https://doi.org/10.1016/j.psychres.2020.113098.
Vannucci, Anna, Kaitlin M. Flannery, and Christine McCauley Ohannessian. 2017. “Social Media Use and Anxiety in Emerging Adults.” Journal of Affective Disorders 207 (January): 163–66. https://doi.org/10.1016/j.jad.2016.08.040.
Vindegaard, Nina, and Michael Eriksen Benros. 2020. “COVID-19 Pandemic and Mental Health Consequences: Systematic Review of the Current Evidence.” Brain, Behavior, and Immunity 89 (October): 531–42. https://doi.org/10.1016/j.bbi.2020.05.048.
Wang, Cuiyan, Riyu Pan, Xiaoyang Wan, Yilin Tan, Linkang Xu, Cyrus S. Ho, and Roger C. Ho. 2020. Immediate psychological responses and associated factors during the initial stage of the 2019 coronavirus disease (COVID-19) epidemic among the general population in China.” International Journal of Environmental Research and Public Health 17 (5): 1729. https://doi.org/10.3390/ijerph17051729.
Wang, Cuiyan, Riyu Pan, Xiaoyang Wan, Yilin Tan, Linkang Xu, Roger S. McIntyre, Faith N. Choo, et al. 2020. “A Longitudinal Study on the Mental Health of General Population During the COVID-19 Epidemic in China.” Brain, Behavior, and Immunity 87 (July): 40–48. https://doi.org/10.1016/j.bbi.2020.04.028.
Wheaton, Michael G., Alena Prikhidko, and Gabrielle R. Messner. 2021. “Is Fear of COVID-19 Contagious? The Effects of Emotion Contagion and Social Media Use on Anxiety in Response to the Coronavirus Pandemic.” Frontiers in Psychology 11 (January). https://doi.org/10.3389/fpsyg.2020.567379.
LS0tCnRpdGxlOiAiUHJlZGljdG9ycyBvZiBEZXByZXNzaW9uIER1cmluZyB0aGUgQ292aWQtMTkgUGFuZGVtaWMiIApzdWJ0aXRsZTogIkN6ZWNoIHNhbXBsZSByZXBvcnQgdjEuMCIKYXV0aG9yOiAiU2Fya2EgVGVzYXJvdmEsIE9uZHJlaiBQZWthY2VrLCBBbGVzc2FuZHJvIFBvcnJvdmVjY2hpbyIKZGF0ZTogIkxhc3QgZWRpdGVkIGByIGZvcm1hdCAoU3lzLnRpbWUoKSwnJWQuICVtLiAlWScpYCIKYmlibGlvZ3JhcGh5OiBiaWJsaW9ncmFwaHkuYmliCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiAKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDIKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICB0aGVtZTogcmVhZGFibGUKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgaW5jbHVkZXM6CiAgICAgIGluX2hlYWRlcjogaGVhZGVyLmh0bWwKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KG91dC53aWR0aCA9ICI5MCUiLCBlY2hvID0gVFJVRSkKYGBgCgpgYGB7Y3NzLCBlY2hvPUZBTFNFfQpwcmUgY29kZSwgcHJlLCBjb2RlIHsKICB3aGl0ZS1zcGFjZTogcHJlICFpbXBvcnRhbnQ7CiAgb3ZlcmZsb3cteDogc2Nyb2xsICFpbXBvcnRhbnQ7CiAgd29yZC1icmVhazoga2VlcC1hbGwgIWltcG9ydGFudDsKICB3b3JkLXdyYXA6IGluaXRpYWwgIWltcG9ydGFudDsKICBtYXgtaGVpZ2h0OiA2MDBweDsKICBvdmVyZmxvdy15OiBhdXRvOwp9CiNUT0MgewogIGZvbnQtc2l6ZTogMTJweDsKfQpoMS50aXRsZSB7CiAgZm9udC1zaXplOiAyOHB4Owp9CmgxIHsKICBmb250LXNpemU6IDIzcHg7Cn0KaDIgewogIGZvbnQtc2l6ZTogMThweDsKfQpoMyB7CiAgZm9udC1zaXplOiAxNnB4Owp9Cmg0IHsKICBmb250LXNpemU6IDEycHg7Cn0KaDQuYXV0aG9yIHsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC1zaXplOiAxNnB4Owp9Cmg0LmRhdGUgewogIGZvbnQtc2l6ZTogMTZweDsKfQpgYGAKCiMgU3R1ZHkgYmFja2dyb3VuZAoKIyMgR29hbCBvZiB0aGUgc3R1ZHkKClRoaXMgcmVzZWFyY2ggcHJvamVjdCBpcyBiYXNlZCBvbiB0aGUgdW1icmVsbGEgcHJvamVjdCAiUGFuZGVtaWMgRW1lcmdlbmN5IGluIFNvY2lhbCBQZXJzcGVjdGl2ZS4gRXZpZGVuY2UgZnJvbSBhIGxhcmdlIFdlYi1zdXJ2ZXkgcmVzZWFyY2giLCBkZXNpZ25lZCBhbmQgb3JnYW5pemVkIGJ5IHByaW5jaXBhbCBpbnZlc3RpZ2F0b3JzIExpbmRhIExvbWJpIChVbml2ZXJzaXTDoCBDYXR0b2xpY2EgZGVsIFNhY3JvIEN1b3JlLCBNaWxhbikgYW5kIE1hcmNvIFRlcnJhbmVvIChVbml2ZXJzaXTDoCBCaWNvY2NhLU1pbGFubykuCgpUaGUgcHJpbmNpcGFsIGdvYWwgb2YgdGhlIGludGVybmF0aW9uYWwgY3Jvc3Mtc2VjdGlvbmFsIHN0dWR5IGlzIHRvIGV4cGxvcmUgdGhlIHByZWRpY3RvcnMgb2YgZGVwcmVzc2lvbiB3aXRoaW4gdGhlIEV1cm9wZWFuIGNvbnRleHQgb2YgdGhlIENvdmlkLTE5IHBhbmRlbWljLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHRoZSBsb2NrZG93biBhbmQgc29jaWFsIGRpc3RhbmNpbmcgcGVyaW9kIG9mIE1hcmNoLUFwcmlsIDIwMjAuCgpPdXIgdGVhbSBoYXMgZGVjaWRlZCB0byBwcmltYXJpbHkgZm9jdXMgb24gdGhlIGltcGFjdCBvZiBtb2RpZmlhYmxlIGJlaGF2aW9yYWwvbGlmZXN0eWxlIGZhY3RvcnMsIHN1Y2ggYXMgZXhlcmNpc2UsIGFsY29ob2wgYW5kIHRvYmFjY28gY29uc3VtcHRpb24sIGJ1dCwgYWxzbywgdGhlIHVzYWdlIG9mIHNvY2lhbCBtZWRpYSBhcyBhIHNvdXJjZSBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFuZGVtaWMuIE91ciBpbnRlbnRpb24gaXMgdG8gY3JlYXRlIGFuZCB2YWxpZGF0ZSBhIGRlcHJlc3Npb24gbW9kZWwgdGhhdCB0aGVzZSBsaXRlcmF0dXJlLWJhc2VkIHByZWRpY3RvcnMgc2hvdWxkIHByZWRpY3QuIEZ1cnRoZXJtb3JlLCB3ZSBpbnRlbmQgdG8gZXhwbG9yZSB0aGUgaW5kaXJlY3QgcGF0aHdheSBiZXR3ZWVuIHNvY2lhbCBtZWRpYSBjb25zdW1wdGlvbiBhbmQgZGVwcmVzc2lvbiBtZWRpYXRlZCBieSB0aGUgbGV2ZWwgb2YgQ292aWQtMTktcmVsYXRlZCBjb25jZXJuL2FueGlldHkuCgpTdXBwbGVtZW50YXJ5IGRhdGEgZm9yIHRoaXMgcHJvamVjdCwgc3VjaCBhcyB0aGUgc3VydmV5IHF1ZXN0aW9ubmFpcmUsIG9yaWdpbmFsIGRhdGFzZXQgYW5kIG90aGVyIGtleSBkb2N1bWVudHMgYXJlIGFjY2Vzc2libGUgaW4gb3VyIFtPcGVuIFNjaWVuY2UgRnJhbWV3b3JrIHJlcG9zaXRvcnldKGh0dHBzOi8vb3NmLmlvL3FzN3puLz92aWV3X29ubHk9OTFjZjYyMDc4ZjYxNGY1MTk5ODFkMTlkNjE2YzU2NDQpLiBUaGUgUiBNYXJrZG93biBjb2RlIGlzIGFsc28gYWNlc3NpYmxlIG9uIG91ciBbR2l0SHViIHJlcG9zaXRvcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9vcG9wOTk5L0NvdmlkKS4KCiMjIFNhbXBsaW5nCgpHaXZlbiB0aGUgcmFwaWRseS1kZXZlbG9waW5nIG5hdHVyZSBvZiB0aGUgQ292aWQtMTkgcGFuZGVtaWMsIHRoZSBwcmluY2lwYWwgcmVzZWFyY2ggdGVhbSAoTG9tYmkgJiBUZXJyYW5lbykgY2hvc2UgYSBjb252ZW5pZW5jZSBzYW1wbGUsIHJlY3J1aXRlZCB0aHJvdWdoIEZhY2Vib29rIG5hdGlvbmFsIGdyb3VwcyB1c2luZyBhIHNub3diYWxsaW5nIHRlY2huaXF1ZS4gVGhlIGdvYWwgd2FzIHRvIGNvbGxlY3QgYXQgbGVhc3QgMTAwMCByZXNwb25zZXMgcGVyIGNvdW50cnkuCgpUaGUgZGF0YSBjb2xsZWN0aW9uIGhhcyBiZWVuIGNvbmR1Y3RlZCBiZXR3ZWVuIE1hcmNoLUFwcmlsIDIwMjAgaW4gdGhlIGZvbGxvd2luZyBlaWdodCBjb3VudHJpZXM6IEl0YWx5LCBGcmFuY2UsIEdlcm1hbnksIFNwYWluLCBVbml0ZWQgS2luZ2RvbSwgU3dlZGVuLCBQb2xhbmQsIEN6ZWNoIFJlcHVibGljIGFuZCB3ZXJlIGNvbmR1Y3RlZCBieSB0aGUgbWVtYmVycyBvZiB0aGUgcmVzcGVjdGl2ZSBuYXRpb25hbCB0ZWFtcyAocGxlYXNlIHNlZSB0aGUgcmVzZWFyY2ggcHJvdG9jb2wgaW4gdGhlIFtPU0YgcmVwb3NpdG9yeV0oaHR0cHM6Ly9vc2YuaW8vcXM3em4vP3ZpZXdfb25seT05MWNmNjIwNzhmNjE0ZjUxOTk4MWQxOWQ2MTZjNTY0NCkuCgpUaGlzIHJlbGF0aXZlbHkgbm9uLXJhbmRvbSBzYW1wbGluZyBpcyBsaWtlbHkgdG8gcmVzdWx0IGluIGEgbm9uLXJlcHJlc2VudGF0aXZlIHNhbXBsZSBmb3IgdGhlIG5hdGlvbmFsIHBvcHVsYXRpb25zLiBUaGlzIGlzIG9uZSBvZiB0aGUgbGltaXRhdGlvbnMgb2YgdGhpcyByZXNlYXJjaCBhbmQgaXMgcmVmbGVjdGVkIGluIHRoZSAiZGF0YSBjb2xsZWN0aW9uIGFuZCBzYW1wbGluZyIgcGFydCBvZiB0aGUgcmVzZWFyY2ggcHJvdG9jb2wgb3V0bGluZWQgYnkgTGluZGEgTG9tYmkgYW5kIE1hcmNvIFRlcnJhbmVvLgoKVGhpcyBhcHByb2FjaCwgdGhlcmVmb3JlLCBkb2VzIG5vdCBhaW0gdG8gY29tcGFyZSBjb3VudHJ5LXNhbXBsZXMsIGJ1dCwgcmF0aGVyLCB0byBjb21wYXJlIHNlZ21lbnRzIG9mIHRoZSBuYXRpb25hbCBzYW1wbGVzLCB3aXRoIGEgcGFydGljdWxhciBmb2N1cyBvbiB0aGUgdnVsbmVyYWJsZSBzb2NpYWwgZ3JvdXBzLCBkZXRlcm1pbmVkIGJ5IHNvY2lvLWRlbW9ncmFwaGljLCBsaWZlc3R5bGUgcHJvZmVzc2lvbmFsIGFuZCBsaXZpbmcgY29uZGl0aW9uIGFzcGVjdHMuCgojIyBBbmFseXNpcyBwbGFuCgpJbiBvcmRlciB0byBjb21wbHkgd2l0aCB0aGUgcHJpbmNpcGxlcyBvZiBPcGVuIFNjaWVuY2UsIHdlIGludGVuZCB0byBzcGxpdCBvdXIgYW5hbHlzaXMgdG8gdHdvIHBhcnRzLgoKMS4gIFdpdGhpbiB0aGUgZmlyc3QgcGFydCwgd2UgdGVzdCB0aGUgbGl0ZXJhdHVyZS1kZXJpdmVkIGh5cG90aGVzZXMgb24gdGhlIEN6ZWNoIHNhbXBsZSAobj0xNDg0KSBvZiB0aGUgaW50ZXJuYXRpb25hbCBzdHVkeSBhbmQgZGV2ZWxvcCBtb2RlbHMuIFdlIGFsc28gZXhwbG9yZSB0aGUgZGF0YXNldCAoaGVyZSByZWZlcnJlZCB0byBhcyBgQ09WMTlfMDVfYWdyb3VwLnNhdmApIGluZHVjdGl2ZWx5IGFuZCBjb25zaWRlciB0aGUgZm9ybXVsYXRpb24gb2YgYWRkaXRpb25hbCBoeXBvdGhlc2VzIGZvciBvdGhlciBwcmVkaWN0b3JzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1pc3NlZCBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3R1ZHkuIFRvIGxvd2VyIHRoZSBjaGFuY2Ugb2Ygb3ZlcmZpdHRpbmcsIHdlIG9ubHkgY29uc2lkZXIgdGhlIGFkZGluZyBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0aGF0IGhhdmUgYW4gZW1waXJpY2FsIHN1cHBvcnQgYmFzZWQgb24gb3VyIHJldmlldyBvZiB0aGUgZXhpc3RpbmcgbGl0ZXJhdHVyZS4gVG93YXJkcyB0aGUgZW5kIG9mIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBwcm9qZWN0LCB3ZSBwcmUtcmVnaXN0ZXIgb3VyIGh5cG90aGVzZXMgYW5kIG90aGVyIGtleSByZXNlYXJjaCBpbmZvcm1hdGlvbiAoaW5jbHVkaW5nIHRoaXMgcmVwcm9kdWNpYmxlIFIgY29kZSkgYXQgdGhlIFtPU0YgUmVnaXN0cmllc10oaHR0cHM6Ly9vc2YuaW8vcmVnaXN0cmllcykuIFdoaWxlIHNvbWUgb2YgdGhlIHRlYW0gbWVtYmVycyBoYXZlIGJyaWVmbHkgaW50ZXJhY3RlZCB3aXRoIHRoZSBpbnRlcm5hdGlvbmFsIGRhdGFzZXQsIHRoZXkgaGF2ZSBub3QgYmVlbiBpbnZvbHZlZCBpbiB0aGUgcHJlLXJlZ2lzdHJhdGlvbiBhbmQgaHlwb3RoZXNpcyBmb3JtaW5nIHByb2Nlc3MgaW4gb3JkZXIgdG8gcmVkdWNlIGJpYXNlcyBieSBzZXBhcmF0aW5nIHRoZSBleHBsb3JhdG9yeSBhbmQgY29uZmlybWF0b3J5IHBoYXNlcyBvZiB0aGUgcmVzZWFyY2guCjIuICBJbiB0aGUgc2Vjb25kIHdlIHdpbGwgYWNjZXNzIHRoZSBpbnRlcm5hdGlvbmFsIGRhdGFzZXQsIHdoaWNoIHdpbGwgaW5jbHVkZSBkYXRhIGZyb20gYWxsIG9mIHRoZSBjb3VudHJpZXMgdGhhdCBnYXRoZXJlZCBhdCBsZWFzdCAxMDAwIHJlc3BvbnNlcy4gV2Ugd2lsbCBjb25kdWN0IGNvbmZpcm1hdG9yeSBhbmFseXNlcywgdGVzdGluZyBvdXIgbW9kZWxzIG9uIHRoaXMgaW50ZXJuYXRpb25hbCBzYW1wbGUsIGZyb20gd2hpY2ggd2Ugd2lsbCBleGNsdWRlIHRoZSBDemVjaCBzdWItc2FtcGxlLgoKIyMgQ29yZSBoeXBvdGhlc2VzCgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IEFsdGVybmF0aXZlIEh5cG90aGVzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVmFyaWFibGUgICAgICAgICAgICAgICAgICAgICAgICB8IExpdGVyYXR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IEgxOiAqKkZlbWFsZSoqIGdlbmRlciBpcyBhc3NvY2lhdGVkIHdpdGggKipoaWdoZXIqKiBsZXZlbHMgb2YgZGVwcmVzc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcTAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtAU2FsazIwMTc7IEBLb3dhbDIwMjA7IEBXYW5nMjAyMGI7IEBMdW8yMDIwOyBAR29uesOhbGV6LVNhbmd1aW5vMjAyMF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBIMjogKipIaWdoZXIqKiBhZ2UgaXMgYXNzb2NpYXRlZCB3aXRoICoqbG93ZXIqKiBsZXZlbHMgb2YgZGVwcmVzc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHEwMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbQEtvd2FsMjAyMDsgQFNoZXZsaW4yMDIwOyBAVGF5bG9yMjAwODsgQExvc2FkYS1CYWx0YXIyMDIwOyBAR29uesOhbGV6LVNhbmd1aW5vMjAyMDsgQENhcnN0ZW5zZW4yMDA2XSB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgSDM6IFBlb3BsZSAqKmluIGEgcmVsYXRpb25zaGlwKiogZXhwZXJpZW5jZSAqKmxvd2VyKiogbGV2ZWxzIG9mIGRlcHJlc3Npb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxMDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW0BLb3dhbDIwMjA7IEBKYWNvYjIwMTldICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgSDQ6ICoqUGFyZW50aG9vZCoqIGlzIGFzc29jaWF0ZWQgd2l0aCBzaWduaWZpY2FudGx5ICoqZGlmZmVyZW50KiogbGV2ZWxzIG9mIGRlcHJlc3Npb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxMDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW0BTdGFuY2EyMDEyOyBAU2hldmxpbjIwMjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgSDU6ICoqSGlnaGVyKiogZWR1Y2F0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCAqKmxvd2VyKiogbGV2ZWxzIG9mIGRlcHJlc3Npb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW0BLb3dhbDIwMjA7IEBHbG9zdGVyMjAyMDsgQFRheWxvcjIwMDhdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgSDY6ICoqVXNlIG9mIHNvY2lhbCBtZWRpYSoqIGlzIGFzc29jaWF0ZWQgd2l0aCAqKmhpZ2hlcioqIGxldmVscyBvZiBkZXByZXNzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxMThfMDIgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW0BCZW5kYXUyMDIwOyBARGhpcjIwMTg7IEBQcmltYWNrMjAxN10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgSDc6ICoqUGh5c2ljYWwgY29udGFjdCoqIHdpdGggZnJpZW5kcyBhbmQgZmFtaWx5IGlzIGFzc29jaWF0ZWQgd2l0aCAqKmxvd2VyKiogbGV2ZWxzIG9mIGRlcHJlc3Npb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxMzVfMDEsIHEzNV8wMyAgICAgICAgICAgICAgICAgIHwgW0BHbG9zdGVyMjAyMDsgQFR1bGwyMDIwOyBATHVvMjAyMF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgSDg6IFJlZ3VsYXIgY29uc3VtcHRpb24gb2YgKiphbGNvaG9sKiogYW5kICoqdG9iYWNjbyoqIGlzIGFzc29jaWF0ZWQgd2l0aCAqKmhpZ2hlcioqIGxldmVscyBvZiBkZXByZXNzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxMzgsIHE0MCAgICAgICAgICAgICAgICAgICAgICAgIHwgW0BTdGFudG9uMjAyMDsgQEF3YXdvcnlpQ2h1cmNoaWxsMjAxN10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgSDk6ICoqUmVndWxhciB3b3Jrb3V0cyoqIG9yIHBoeXNpY2FsIGFjdGl2aXR5IGFyZSBhc3NvY2lhdGVkIHdpdGggKipsb3dlcioqIGxldmVscyBvZiBkZXByZXNzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxNDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW0BIYXJ2ZXkyMDE4OyBAU2NodWNoMjAxNjsgQEt2YW0yMDE2OyBAS3JvZ2gyMDE3OyBAU3R1YmJzMjAxOF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgSDEwOiAqKldvcnNlIHNlbGYtcmF0ZWQgaGVhbHRoIHF1YWxpdHkqKiBpcyBhc3NvY2lhdGVkIHdpdGggKipoaWdoZXIqKiBsZXZlbHMgb2YgZGVwcmVzc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxNDcsIHE0OCwgcTQ3ICAgICAgICAgICAgICAgICAgIHwgW0BBbWJyZXNpbjIwMTQ7IEBWaW5kZWdhYXJkMjAyMDsgQEhvc3NhaW4yMDIwXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgSDExOiAqKkFkZXF1YXRlIGxldmVsIG9mIHB1YmxpYyBpbmZvcm1hdGlvbioqIGFib3V0IENvdmlkLTE5IHRyYW5zbWlzc2lvbiBhbmQgKipwcmVjYXV0aW9uYXJ5IG1lYXN1cmVzKiogdG8gcHJldmVudCBpdHMgc3ByZWFkIChoYW5kIHdhc2hpbmcgYW5kIG1hc2sgd2VhcmluZykgaXMgYXNzb2NpYXRlZCB3aXRoICoqbG93ZXIqKiBsZXZlbHMgb2YgZGVwcmVzc2lvbi4gICAgICAgICAgICAgfCBxMjAsIDM0XzAyLCAzNF8wNyAgICAgICAgICAgICAgIHwgW0BXYW5nMjAyMDsgQFdhbmcyMDIwYl0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgSDEyOiAqKkVjb25vbWljIGRpc3RyZXNzKiogaXMgYXNzb2NpYXRlZCB3aXRoICoqaGlnaGVyKiogbGV2ZWxzIG9mIGRlcHJlc3Npb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxMzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW0BNZWx0emVyMjAwOV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgSDEzOiBJbiBhZGRpdGlvbiB0byBINiwgd2UgaHlwb3RoZXNpemUgdGhlIGV4aXN0ZW5jZSBvZiBhIGNhdXNhbCBwYXRod2F5IGxlYWRpbmcgZnJvbSAqKnNvY2lhbCBtZWRpYSBleHBvc3VyZSoqIHRvICoqZGVwcmVzc2lvbioqLCB3aGljaCBpcyBtZWRpYXRlZCBieSAqKkNvdmlkLTE5IGNvbmNlcm4vYW54aWV0eSoqIGFuZCBtb2RlcmF0ZWQgYnkgKiphZ2UqKiBhbmQgKipnZW5kZXIuKiogfCBxMDEsIHEwMiwgcTE4XzAyLCBjb25jZXJuX2luZGV4IHwgW0BCZW5kYXUyMDIwOyBAUmFzbXVzc2VuMjAyMDsgQFdoZWF0b24yMDIxOyBAVmFubnVjY2kyMDE3OyBATWVydGVuczIwMjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgojIEFuYWx5c2lzIG9mIHRoZSBDemVjaCBzYW1wbGUKCiMjIExvYWRpbmcgdGhlIGRhdGFzZXQsIHJlcXVpcmVkIFIgcGFja2FnZXMgYW5kIGRhdGEgd3JhbmdsaW5nCgpUaGUgY29kZSBiZWxvdyBjYW4gYmUgcnVuIGluIFIgb3IgaW4gUiBJREUsIHN1Y2ggYXMgUiBTdHVkaW8uIFdlIHVzZWQgUiBNYXJrZG93biB3aXRoaW4gdGhlIFIgU3R1ZGlvIHRvIGNvbXBvc2UgdGhpcyByZXBvcnQgYW5kIHVzZWQgdGhlIG9wZW4tc291cmNlIFtqYW1vdmkgc29mdHdhcmVdKGphbW92aS5vcmcpIChhIFIgR1VJKSB0byBjb25kdWN0IHNvbWUgb2YgdGhlIGV4cGxvcmF0b3J5IGFuYWx5c2VzIHRoYXQgYXJlIHRoZW4gcmVwbGljYXRlZCBoZXJlLgoKYGBge3IgbG9hZGluZyBwYWNrYWdlcyBhbmQgZGF0YXNldCwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBUaGUgZm9sbG93aW5nIHBhY2thZ2VzIG1pZ2h0IG5lZWQgdG8gYmUgaW5zdGFsbGVkIG9udG8geW91ciB2ZXJzaW9uIAojIG9mIFIgcHJpb3IgdG8gdGhlIHJ1bm5pbmcgb2YgdGhlIGNvZGUgYmVsb3cuCgojIFBhY2thZ2UgbmFtZXMKcGFja2FnZXMgPC0gYygidWRwaXBlIiwgIk1BU1MiLCAibGF2YWFuIiwgInByb2Nlc3NSIiwgIndvcmRjbG91ZCIsICJjb3JycGxvdCIsICJ0aWR5dGV4dCIsICJ0aWR5dmVyc2UiLCAiaGF2ZW4iLCAiam12IiwgIkhtaXNjIikKCiMgSW5zdGFsbCBwYWNrYWdlcyBub3QgeWV0IGluc3RhbGxlZAppbnN0YWxsZWRfcGFja2FnZXMgPC0gcGFja2FnZXMgJWluJSByb3duYW1lcyhpbnN0YWxsZWQucGFja2FnZXMoKSkKaWYgKGFueShpbnN0YWxsZWRfcGFja2FnZXMgPT0gRkFMU0UpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcyhwYWNrYWdlc1shaW5zdGFsbGVkX3BhY2thZ2VzXSkKfQoKIyBQYWNrYWdlcyBsb2FkaW5nCmludmlzaWJsZShsYXBwbHkocGFja2FnZXMsIGxpYnJhcnksIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkpCgojIFdlIGxvYWQgdGhlIG9yaWdpbmFsIEN6ZWNoIGRhdGFzZXQgKGluIFNQU1MgZm9ybWF0KSBmcm9tIGEgbG9jYWwgZGlyZWN0b3J5LgpkYXRhIDwtIHphcF9sYWJlbHMoaGF2ZW46OnJlYWRfc2F2KGZpbGUgPSAiQ09WMTlfMDVfYWdyb3VwLnNhdiIpKQoKIyBGb3IgdXNlIGluIGNvcnJlbGF0aW9uIGFuYWx5c2lzLCB3ZSBkdXBsaWNhdGUgdGhlIGRhdGFzZXQgdW5kZXIgbmFtZSBkYXRhX2NvcnIKZGF0YV9jb3JyIDwtIGRhdGEKCiMgV2UgYWxzbyB0cnkgdG8gbGltaXQgdGhlIGRlY2ltYWxzIHRvIHRocmVlIHNpZ25pZmljYW50IGZpZ3VyZXMKb3B0aW9ucyhkaWdpdHMgPSAzLCBzY2lwZW4gPSA5OTkpCgoKYGBgCgpgYGB7ciBkYXRhIGNsZWFuaW5nIGFuZCB3cmFuZ2xpbmd9CiMgRmlyc3RseSwgYmVjYXVzZSB0aGUgc291cmNlIGZpbGUgaXMgYW4gU1BTUyBmaWxlLCB3ZSBuZWVkIHRvIHNwZWNpZnkgdGhhdCB3ZSAKIyB3b3VsZCBsaWtlIHRvIHNlZSB2YWx1ZSBsYWJlbHMgKHN1Y2ggYXMgTWFsZS9GZW1hbGUpIGZvciBzZWxlY3RlZCB2YXJpYWJsZXMsIGFzCiMgb3Bwb3NlZCB0byBqdXN0IG51bWVyaWMgdmFsdWVzIChzdWNoIGFzIDEvMikuIFRoaXMgaXMgbm90IGVzc2VudGlhbCBmb3IgCiMgdGhlIGFuYWx5c2lzLCBidXQgc2VlaW5nIHRoZSBuYW1lcyBvZiBsYWJlbHMgd2lsbCBlbmFibGUgYmV0dGVyIHVuZGVyc3RhbmRpbmcgCiMgb2YgdGhlIHJlc3VsdHMuIFdlIGFsc28gcmVuYW1lIGtleSB2YXJpYWJsZXMgdG8gYSBtb3JlIGh1bWFuLXJlYWRhYmxlIGZvcm0sIAojIHdoaWxlIGFsc28gcmVuYW1pbmcgdmFyaWFibGVzIHJlbGF0ZWQgdG8gQ292aWQtMTkgY29uY2VybnMsIHdoaWNoIHdlIHdpbGwgdXNlIAojIHRvIGNvbnN0cnVjdCB0aGUgQ292aWQtMTkgY29uY2VybiBpbmRleCB3aXRoIGZhY3RvciBhbmFseXNpcyAodG8gdXNlIGZvciAKIyBwYXRoIGFuYWx5c2lzIGFmdGVyd2FyZHMpLiBGaW5hbGx5LCBmb3IgY29udmVuaWVuY2UsIHdlIHRyYW5zbGF0ZSB0aGUgY29yZSAKIyB2YXJpYWJsZXMgbGFiZWxzIGZyb20gQ3plY2ggdG8gRW5nbGlzaC4KCmRhdGEgPC0gZGF0YSAlPiUgCiAgdHJhbnNtdXRlKGlkID0gUmVzcG9uZGVudElELAogICAgICAgICAgICBxMDFfZ2VuZGVyID0gcmVjb2RlX2ZhY3Rvcihhc19mYWN0b3IocTAxKSwKICAgICAgICAgICAgYDFgID0gImZlbWFsZSIsCiAgICAgICAgICAgIGAyYCA9ICJtYWxlIiksCiAgICAgICAgICAgIHEwMl9hZ2UgPSBxMDIsCiAgICAgICAgICAgIHEwMl9hZ2VfZ3JvdXAgPSByZWNvZGVfZmFjdG9yKGFzX2ZhY3RvcihRNF9BR0VfciksCiAgICAgICAgICAgIGAxYCA9ICIxNi0yOSB5ZWFycyIsCiAgICAgICAgICAgIGAyYCA9ICIzMC00OSB5ZWFycyIsIAogICAgICAgICAgICBgM2AgPSAiNTAtNjQgeWVhcnMiLCAKICAgICAgICAgICAgYDRgID0gIjY1KyIpLCAKICAgICAgICAgICAgcTAzX3JlbGF0aW9uc2hpcF90eXBlID0gcmVjb2RlX2ZhY3Rvcihhc19mYWN0b3IocTAzKSwKICAgICAgICAgICAgYDFgID0gInNpbmdsZSIsIAogICAgICAgICAgICBgMmAgPSAicmVsYXRpb25zaGlwIiwgCiAgICAgICAgICAgIGAzYCA9ICJtYXJyaWVkIiwgCiAgICAgICAgICAgIGA0YCA9ICJkaXZvcmNlZCIsIAogICAgICAgICAgICBgNWAgPSAid2lkb3dlZCIpLAogICAgICAgICAgICBxMDRfY2hpbGRyZW4gPSByZWNvZGVfZmFjdG9yKGFzX2ZhY3RvcihxMDQpLCAKICAgICAgICAgICAgYDFgID0gInllcyIsIAogICAgICAgICAgICBgMmAgPSAibm8iKSwKICAgICAgICAgICAgcTExX2VkdWNhdGlvbiA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKHExMSksIAogICAgICAgICAgICBgMWAgPSAidW5maW5fZWxlbWVudCIsIAogICAgICAgICAgICBgMmAgPSAiZWxlbWVudCIsIAogICAgICAgICAgICBgM2AgPSAidW5maW5faHMiLCAKICAgICAgICAgICAgYDRgID0gImhzIiwgCiAgICAgICAgICAgIGA1YCA9ICJ1bmRlcmdyYWQiLCAKICAgICAgICAgICAgYDZgID0gInBvc3RncmFkIiksCiAgICAgICAgICAgIHExOF8wMl9zb2NfbWVkaWEgPSByZWNvZGVfZmFjdG9yKGFzX2ZhY3RvcihyZXBsYWNlX25hKHExOF8wMiwgMCkpLAogICAgICAgICAgICBgMGAgPSAibm8iLCAKICAgICAgICAgICAgYDFgID0gInllcyIpLAogICAgICAgICAgICBxMjBfcHVibGljX2luZm8gPSByZWNvZGVfZmFjdG9yKGFzX2ZhY3RvcihxMjApLCAKICAgICAgICAgICAgYDFgID0gInllcyIsIAogICAgICAgICAgICBgMmAgPSAibm8iLCAKICAgICAgICAgICAgYDNgID0gImRvX25vdF9rbm93IiksCiAgICAgICAgICAgIHEzNF8wMl9mYWNlX21hc2sgPSByZWNvZGVfZmFjdG9yKGFzX2ZhY3RvcihxMzRfMDIpLCAKICAgICAgICAgICAgYDFgID0gInllcyIsIAogICAgICAgICAgICBgMmAgPSAibm8iKSwKICAgICAgICAgICAgcTM0XzA3X2hhbmRfd2FzaGluZyA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKHEzNF8wNyksIAogICAgICAgICAgICBgMWAgPSAieWVzIiwgCiAgICAgICAgICAgIGAyYCA9ICJubyIpLAogICAgICAgICAgICBxMzVfMDFfY29udGFjdF9jbG9zZV9mYW1pbHkgPSByZWNvZGVfZmFjdG9yKGFzX2ZhY3RvcihxMzVfMDEpLCAKICAgICAgICAgICAgYDFgID0gImxlc3Nfb2Z0ZW4iLCAKICAgICAgICAgICAgYDJgID0gImFzX2JlZm9yZSIsIAogICAgICAgICAgICBgM2AgPSAibW9yZV9vZnRlbiIpLAogICAgICAgICAgICBxMzVfMDNfY29udGFjdF9mcmllbmRzID0gcmVjb2RlX2ZhY3Rvcihhc19mYWN0b3IocTM1XzAzKSwgCiAgICAgICAgICAgIGAxYCA9ICJsZXNzX29mdGVuIiwgCiAgICAgICAgICAgIGAyYCA9ICJhc19iZWZvcmUiLCAKICAgICAgICAgICAgYDNgID0gIm1vcmVfb2Z0ZW4iKSwKICAgICAgICAgICAgcTM2X2Vjb25fd29ycnkgPSByZWNvZGVfZmFjdG9yKGFzX2ZhY3RvcihxMzYpLCAKICAgICAgICAgICAgYDFgID0gInZlcnlfc2VyaW91cyIsIAogICAgICAgICAgICBgMmAgPSAic2VyaW91cyIsIAogICAgICAgICAgICBgM2AgPSAibGltaXRlZCIpLAogICAgICAgICAgICBxMzhfYWxjb2hvbCA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKHEzOCksIAogICAgICAgICAgICBgMWAgPSAieWVzIiwgCiAgICAgICAgICAgIGAyYCA9ICJubyIpLAogICAgICAgICAgICBxNDBfc21va2luZyA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKHE0MCksIAogICAgICAgICAgICBgMWAgPSAieWVzIiwgCiAgICAgICAgICAgIGAyYCA9ICJubyIpLAogICAgICAgICAgICBxNDJfc3BvcnQgPSByZWNvZGVfZmFjdG9yKGFzX2ZhY3RvcihxNDIpLCAKICAgICAgICAgICAgYDFgID0gInllcyIsIAogICAgICAgICAgICBgMmAgPSAibm8iKSwKICAgICAgICAgICAgcTQ3X3NlbGZfcmVwb3J0aW5nX2hlYWx0aCA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKHE0NyksIAogICAgICAgICAgICBgMWAgPSAiZXhjZWxsZW50IiwgCiAgICAgICAgICAgIGAyYCA9ICJnb29kIiwgCiAgICAgICAgICAgIGAzYCA9ICJuZXV0cmFsIiwgCiAgICAgICAgICAgIGA0YCA9ICJiYWQiLCAKICAgICAgICAgICAgYDVgID0gInZlcnlfYmFkIiksCiAgICAgICAgICAgIHE0OF9jaHJvbmljX2lsbG5lc3MgPSByZWNvZGVfZmFjdG9yKGFzX2ZhY3RvcihxNDgpLCAKICAgICAgICAgICAgYDFgID0gInllcyIsIAogICAgICAgICAgICBgMmAgPSAibm8iKSwKICAgICAgICAgICAgcTQ5X2hlYWx0aF9saW1pdGF0aW9ucyA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKHE0OSksIAogICAgICAgICAgICBgMWAgPSAibGltaXRzIiwgCiAgICAgICAgICAgIGAyYCA9ICJwYXJ0aWFsbHlfbGltaXRzIiwgCiAgICAgICAgICAgIGAzYCA9ICJub19saW1pdHMiKSwKICAgICAgICAgICAgcTMwX2NvbmNlcm5faW5mZWN0aW9uX2NvdmlkID0gcTMwLAogICAgICAgICAgICBxMzFfY29uY2Vybl9pbmZlY3Rpb25fZnJpZW5kcyA9IHEzMSwKICAgICAgICAgICAgcTMzXzAxX2NvbmNlcm5fc2l0dWF0aW9uID0gcTMzXzAxLAogICAgICAgICAgICBxMzNfMDJfY29uY2Vybl9sb3dfY29udHJvbCA9IHEzM18wMiwKICAgICAgICAgICAgcTMzXzAzX2NvbmNlcm5fc3Vydml2YWxfY292aWQgPSBxMzNfMDMsCiAgICAgICAgICAgIHEzM18wNF9jb25jZXJuX2NoYW5nZV9lbXBsb3ltZW50ID0gcTMzXzA0LAogICAgICAgICAgICBxMzNfMDVfY29uY2Vybl9pbmZlY3Rpbmdfb3RoZXJzID0gcTMzXzA1LAogICAgICAgICAgICBQSFE4ID0gUEhROCwKICAgICAgICAgICAgcTUwX2NvbW1lbnQgPSBxNTApCgprYWJsZUV4dHJhOjprYmwoaGVhZChkYXRhKSwgCiAgICAgIGNhcHRpb24gPSAiVGhlIG92ZXJ2aWV3IG9mIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGRhdGFzZXQgYW5kIGl0cyBrZXkgdmFyaWFibGVzIikgJT4lCiAgICAgIGthYmxlRXh0cmE6OmthYmxlX2NsYXNzaWMobGlnaHRhYmxlX29wdGlvbnMgPSBjKCJzdHJpcGVkIikpICU+JQogICAgICBrYWJsZUV4dHJhOjpzY3JvbGxfYm94KHdpZHRoID0gIjgzMHB4IiwgaGVpZ2h0ID0gIjEwMCUiKQpgYGAKCiMjIFNhbXBsZSBkZXNjcmlwdGl2ZSBzdGF0aXN0aWNzOiBEZXByZXNzaW9uIGluZGV4IChQSFE4KQoKVGhlIGBQSFE4YGRlcGVuZGVudCB2YXJpYWJsZSBpbnRlbmQgdG8gZGV0ZXJtaW5lIHRoZSBwcmVzZW5jZSBhbmQgc2V2ZXJpdHkgb2YgbWFqb3IgZGVwcmVzc2l2ZSBkaXNvcmRlci4gVGhlIFBIUS04IGluZGV4IGNvbnN0cnVjdGlvbiBpcyBzdGFuZGFyZGl6ZWQgYW5kIGJhc2VkIG9uIHRoZSBlc3RhYmxpc2hlZCBtZXRob2RvbG9neSBbQEtyb2Vua2UyMDA5XS4gVGhlIFBIUS04IHF1ZXN0aW9ubmFpcmUgYXNrcyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhlIHBhc3QgMiB3ZWVrcyB0aGUgcmVzcG9uZGVudCBoYWQgZXhwZXJpZW5jZWQgYSBzcGVjaWZpYyBkZXByZXNzaXZlIHN5bXB0b20uCgpUaGlzIHZhcmlhYmxlIHdhcyByZWNvZGVkIGJ5IHRoZSBpbnRlcm5hdGlvbmFsIHRlYW0gZnJvbSA4IHN1cnZleSBpdGVtcyAoc2VlIHRoZSBbT1NGIHByb2plY3QgcGFnZV0oaHR0cHM6Ly9vc2YuaW8vcXM3em4vP3ZpZXdfb25seT05MWNmNjIwNzhmNjE0ZjUxOTk4MWQxOWQ2MTZjNTY0NCkgZm9yIHRoZSBwcmVjaXNlIHN5bnRheCkgYW5kIGlzIHRodXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZGF0YXNldC4KClNpbmNlIHdlIGFyZSB1c2luZyBzZXZlcmFsIGxpbmVhciBtb2RlbHMgaW4gdGhpcyByZXBvcnQsIHdob3NlIGFzc3VtcHRpb24gaXMgbm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiB0aGUgcmVzaWR1YWxzLCB3ZSBjb3VsZCBiZW5lZml0IGZyb20gdGhlIHBvd2VyIHRyYW5zZm9ybWF0aW9uIG9mIG91ciBkZXBlbmRlbnQgdmFyaWFibGUgYFBIUThgICh1c2luZyBZZW8tSm9obnNvbiBmdW5jdGlvbikuIFdlIG5hbWUgdGhpcyB0cmFuc2Zvcm1lZCB2YXJpYWJsZSBgUEhROF90YC4KCmBgYHtyIFBIUTggZGVzY3JpcHRpdmVzfQojIFRvIHN1bW1hcml6ZSB0aGUgZGVwZW5kZW50IGNvbnRpbnVvdXMgdmFyaWFibGUsIHdlIHVzZSB0aGUgZGVzY3JpcHRpdmVzKCkgCiMgZnVuY3Rpb24gZnJvbSB0aGUgam12IHBhY2thZ2UuCgpkZXNjcmlwdGl2ZXMgPC0gam12OjpkZXNjcmlwdGl2ZXMoCiAgICBkYXRhID0gZGF0YSwKICAgIHZhcnMgPSAiUEhROCIsCiAgICBmcmVxID0gVFJVRSwKICAgIGJveCA9IFRSVUUsCiAgICBtZWRpYW4gPSBGQUxTRSwKICAgIHJhbmdlID0gVFJVRSwKICAgIHNkID0gVFJVRSwKICAgIHBjID0gVFJVRSkKCmBgYAoKIyMjIFBIUTggcmVzdWx0cyB0YWJsZSB7LnRhYnNldCAudGFic2V0LXBpbGxzfQoKIyMjIyBQbG90cwoKYGBge3IsIGNvbW1lbnQgPSAiIn0KZGVzY3JpcHRpdmVzJHBsb3RzCmBgYAoKIyMjIyBEZXNjcmlwdGl2ZXMKCmBgYHtyLCBjb21tZW50ID0gIiJ9CmRlc2NyaXB0aXZlcyRkZXNjcmlwdGl2ZXMKYGBgCgpgYGB7ciBQSFE4IHRyYW5zZm9ybWF0aW9uLCBpbmNsdWRlPUZBTFNFfQojIE5vcm1hbGl0eSB0cmFuc2Zvcm1hdGlvbjogZmluZGluZyBsYW1iZGEgZm9yIGVudGlyZSBtb2RlbCB0aGF0IAojIGluY2x1ZGVzIFBIUTggYXMgYSBkZXBlbmRlbnQgdmFyaWFibGUKWUogPC0gY2FyOjpwb3dlclRyYW5zZm9ybShsbShQSFE4IH4gcTAxX2dlbmRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcTAyX2FnZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcTAzX3JlbGF0aW9uc2hpcF90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBxMDRfY2hpbGRyZW4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBxMTFfZWR1Y2F0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBxMThfMDJfc29jX21lZGlhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBxMjBfcHVibGljX2luZm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHEzNF8wMl9mYWNlX21hc2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHEzNF8wN19oYW5kX3dhc2hpbmcgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBxMzVfMDFfY29udGFjdF9jbG9zZV9mYW1pbHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHEzNV8wM19jb250YWN0X2ZyaWVuZHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHEzOF9hbGNvaG9sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBxNDBfc21va2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcTQyX3Nwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBxNDdfc2VsZl9yZXBvcnRpbmdfaGVhbHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBxNDhfY2hyb25pY19pbGxuZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBxNDlfaGVhbHRoX2xpbWl0YXRpb25zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBkYXRhID0gZGF0YSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGZhbWlseSA9ICJ5alBvd2VyIikKbGFtYmRhWUogPC0gWUokbGFtYmRhCgojIFllby1Kb2huc29uIHRyYW5zZm9ybWF0aW9uIG9mIHRoZSBkZXBlbmRlbnQgdmFyaWFibGUKUEhROF90IDwtIGNhcjo6eWpQb3dlcihVID0gZGF0YSRQSFE4LCBsYW1iZGEgPSBsYW1iZGFZSikKCiMgQWRkaW5nIHRoZSBuZXdseSBjcmVhdGVkIHZhcmlhYmxlIHRvIHRoZSBkYXRhc2V0CmRhdGEgPC0gY2JpbmQoZGF0YSwgUEhROF90KQpgYGAKCiMjIFNhbXBsZSBkZXNjcmlwdGl2ZSBzdGF0aXN0aWNzOiBEZW1vZ3JhcGhpYyBjaGFyYWN0ZXJpc3RpY3MgKEN6ZWNoIHNhbXBsZSkKCkluIHRoZSBuZXh0IHN0ZXAsIHdlIGFzc2VzIHRoZSBkZW1vZ3JhcGhpYyBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHJlc3BvbmRlbnRzIGluIHRoZSBDemVjaCBzYW1wbGUuCgpgYGB7ciBzYW1wbGUgZGVtb2dyYXBoeSBkZXNjcmlwdGl2ZXN9CiMgVG8gc3VtbWFyaXplIHRoZSBrZXkgZGVtb2dyYXBoaWMgdmFyaWFibGVzLCB3ZSB1c2UgdGhlIGRlc2NyaXB0aXZlcygpIAojIGZ1bmN0aW9uIGZyb20gdGhlIGptdiBwYWNrYWdlLgoKZGVtb19kZXNjcmlwdGl2ZXMgPC0gam12OjpkZXNjcmlwdGl2ZXMoCiAgICBkYXRhID0gZGF0YSwKICAgIHZhcnMgPSB2YXJzKCJxMDFfZ2VuZGVyIiwKICAgICAgICAgICAgICAgICJxMDJfYWdlX2dyb3VwIiwKICAgICAgICAgICAgICAgICJxMDNfcmVsYXRpb25zaGlwX3R5cGUiLAogICAgICAgICAgICAgICAgInEwNF9jaGlsZHJlbiIsCiAgICAgICAgICAgICAgICAicTExX2VkdWNhdGlvbiIpLAogICAgYmFyID0gVFJVRSwKICAgIGZyZXEgPSBUUlVFLAogICAgbWlzc2luZyA9IEZBTFNFLAogICAgbWVhbiA9IEZBTFNFLAogICAgbWVkaWFuID0gRkFMU0UsCiAgICBzZCA9IEZBTFNFLAogICAgbWluID0gRkFMU0UsCiAgICBtYXggPSBGQUxTRSkKYGBgCgojIyMgRGVtb2dyYXBoaWMgY2hhcmFjdGVyaXN0aWNzIHJlc3VsdHMgdGFibGUgey50YWJzZXQgLnRhYnNldC1waWxsc30KCiMjIyMgUGxvdHMKCmBgYHtyLCBjb21tZW50ID0gIiJ9CmRlbW9fZGVzY3JpcHRpdmVzJHBsb3RzCmBgYAoKIyMjIyBGcmVxdWVuY2llcwoKYGBge3IsIGNvbW1lbnQgPSAiIn0KZGVtb19kZXNjcmlwdGl2ZXMkZnJlcXVlbmNpZXMJCmBgYAoKIyBCdWlsZGluZyByZWdyZXNzaW9uIG1vZGVsIHRvIHByZWRpY3QgUEhROAoKQWZ0ZXIgZGVzY3JpcHRpdmUgc3RhdGlzdGljcywgd2UgY29udGludWUgd2l0aCBidWlsZGluZyBhbmQgZml0dGluZyBvZiB0aGUgcmVncmVzc2lvbiBtb2RlbCBiYXNlZCBvbiBvdXIgaHlwb3RoZXNlcy4KClRoZSBtb2RlbCBoYXMgb25lIGluZGVwZW5kZW50IGNvbnRpbnVvdXMgdmFyaWFibGUgLSBgUEhROGAuIFRoZSBvbmx5IG90aGVyIGNvbnRpbnVvdXMgdmFyaWFibGUgaW4gdGhlIG1vZGVsIGlzIGBxMDJfYWdlYCwgd2hpY2ggaXMgaW5wdXR0ZWQgYXMgYSBjb3ZhcmlhdGUuIFRoZSByZXN0IG9mIHRoZSB2YXJpYWJsZXMgYXJlIGVpdGhlciBjYXRlZ29yaWNhbCAoYm90aCBub21pbmFsIGFuZCBvcmRpbmFsKSBvciBiaW5hcnkuIFRoZSBgbGlucmVnKClgIGZ1bmN0aW9uIGZyb20gdGhlIGptdiBwYWNrYWdlIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB0aGVtIGFzIGR1bW15IHZhcmlhYmxlcyB3aXRoIHJlZmVyZW5jZSBsZXZlbHMgYW5kIGl0IGlzIHRodXMgbm90IG5lY2Vzc2FyeSB0byBjcmVhdGUgZnVydGhlciBkdW1teSB2YXJpYWJsZXMgcHJpb3IgdG8gdGhpcyBhbmFseXNpcy4KCiMjIE92ZXJ2aWV3IG9mIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIGluZGl2aWR1YWwgcHJlZGljdG9ycyBhbmQgb3V0Y29tZQoKQXMgYSBmaXJzdCBzdGVwIGluIHRoZSByZWdyZXNzaW9uIG1vZGVsIGNyZWF0aW9uLCB3ZSBjb25kdWN0IGEgY29ycmVsYXRpb24gYW5hbHlzaXMuIFNpbmNlIHdlIGRvIG5vdCBwcmVzdW1lIGxpbmVhcml0eSBiZXR3ZWVuIGFsbCBvZiB0aGUgdmFyaWFibGVzLCB3ZSB1c2UgU3BlYXJtYW4ncyByYW5rIGNvZWZmaWNpZW50IGluc3RlYWQgb2YgUGVhcnNvbidzICpyKiouKioqIFRoZSByZXN1bHRzIGJlbG93IG5lZWQgdG8gYmUgaW50ZXJwcmV0ZWQgd2l0aCBjYXV0aW9uLCBzaW5jZSBzb21lIG9mIHRoZSB2YXJpYWJsZXMgYXJlIGNhdGVnb3JpY2FsIChzdWNoIGFzIGBxMDNfcmVsYXRpb25zaGlwX3R5cGVgKSwgd2l0aG91dCBhIGRlZmluZWQgb3JkZXIuIEZvciBjYXRlZ29yaWNhbCB2YXJpYWJsZXMsIGNvbXBhcmlzb25zIHVzaW5nIENoaS1TcXVhcmUgdGVzdCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBob3dldmVyLCBpbiB0aGlzIHN0ZXAsIHdlIGFyZSBwcmltYXJpbHkgbG9va2luZyBhdCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIG91dGNvbWUgKGBQSFE4YCkgYW5kIHRoZSB0aGVvcml6ZWQgcHJlZGljdG9ycy4gU3RhdGlzdGljYWxseSBub24tc2lnbmlmaWNhbnQgY29ycmVsYXRpb25zIChwIFw+IDAuMDUpIGFyZSBjcm9zc2VkIG91dCBpbiB0aGUgY29ycmVsYXRpb24gbWF0cml4LgoKYGBge3IgY29ycmVsYXRpb24gbWF0cml4LCBmaWcuaGVpZ2h0PTksIGZpZy53aWR0aD05fQojIFdoaWxlIHRoZSBkYXRhc2V0IGhhcyBiZWVuIGFscmVhZHkgaW1wb3J0ZWQsIHRoZSB2YWx1ZXMgb2YgZmFjdG9yIHZhcmlhYmxlcyAKIyB3ZXJlIGNoYW5nZWQgZnJvbSBudW1lcmljcyB0byB0ZXh0IHN0cmluZ3MsIHRoZXJlZm9yZSB0aGF0IGRhdGFzZXQgaXMgdW5zdWl0YWJsZQojIGZvciBjb3JyZWxhdGlvbiBhbmFseXNpcy4gVG8gc29sdmUgdGhpcywgd2UgY3JlYXRlIGEgcGFyYWxsZWwgZGF0YXNldCwgCiMgYWdhaW4gcmVuYW1pbmcgdGhlIGtleSB2YXJpYWJsZXMgdG8gYSBtb3JlIHVuZGVyc3RhbmRhYmxlIGZvcm0uCgpkYXRhX2NvcnIgPC0gZGF0YV9jb3JyICU+JSAKICAgICAgICAgICAgICB0cmFuc211dGUocTAxX2dlbmRlciA9IHEwMSwgCiAgICAgICAgICAgICAgICAgICAgICAgIHEwMl9hZ2UgPSBxMDIsCiAgICAgICAgICAgICAgICAgICAgICAgIHEwM19yZWxhdGlvbnNoaXBfdHlwZSA9IHEwMywKICAgICAgICAgICAgICAgICAgICAgICAgcTA0X2NoaWxkcmVuID0gcTA0LAogICAgICAgICAgICAgICAgICAgICAgICBxMTFfZWR1Y2F0aW9uID0gcTExLAogICAgICAgICAgICAgICAgICAgICAgICBxMThfMDJfc29jX21lZGlhID0gcmVwbGFjZV9uYShxMThfMDIsIDApLAogICAgICAgICAgICAgICAgICAgICAgICBxMjBfcHVibGljX2luZm8gPSBxMjAsCiAgICAgICAgICAgICAgICAgICAgICAgIHEzNF8wMl9mYWNlX21hc2sgPSBxMzRfMDIsCiAgICAgICAgICAgICAgICAgICAgICAgIHEzNF8wN19oYW5kX3dhc2hpbmcgPSBxMzRfMDcsCiAgICAgICAgICAgICAgICAgICAgICAgIHEzNl9lY29uX3dvcnJ5ID0gcTM2LAogICAgICAgICAgICAgICAgICAgICAgICBxMzVfMDFfY29udGFjdF9jbG9zZV9mYW1pbHkgPSBxMzVfMDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHEzNV8wM19jb250YWN0X2ZyaWVuZHMgPSBxMzVfMDMsCiAgICAgICAgICAgICAgICAgICAgICAgIHEzOF9hbGNvaG9sID0gcTM4LAogICAgICAgICAgICAgICAgICAgICAgICBxNDBfc21va2luZyA9IHE0MCwKICAgICAgICAgICAgICAgICAgICAgICAgcTQyX3Nwb3J0ID0gcTQyLAogICAgICAgICAgICAgICAgICAgICAgICBxNDdfc2VsZl9yZXBvcnRpbmdfaGVhbHRoID0gcTQ3LAogICAgICAgICAgICAgICAgICAgICAgICBxNDhfY2hyb25pY19pbGxuZXNzID0gcTQ4LAogICAgICAgICAgICAgICAgICAgICAgICBxNDlfaGVhbHRoX2xpbWl0YXRpb25zID0gcTQ5KQoKZGF0YV9jb3JyIDwtIGNiaW5kKGRhdGFfY29yciwgUEhROF90KQoKcmVzMSA8LSBjb3IubXRlc3QoZGF0YV9jb3JyLCBjb25mLmxldmVsID0gLjk1KQoKI0NvcnJlbGF0aW9uIG1hdHJpeCB1c2luZyBTcGVhcm1hbiBjb2VmZmljaWVudCAodmFsdWVzIHdpdGggcD4wLjA1IGFyZSBjcm9zc2VkKQpjb3JycGxvdChjb3IoZGF0YV9jb3JyLCAKICAgICAgICAgICAgIG1ldGhvZCA9ICJzcGVhcm1hbiIsIAogICAgICAgICAgICAgdXNlID0gImNvbXBsZXRlLm9icyIpLCAKICAgICAgICAgICAgIG1ldGhvZCA9ICJjaXJjbGUiLCAKICAgICAgICAgICAgIHRpdGxlID0gIkNvcnJlbGF0aW9uIE1hdHJpeCAtIFNwZWFybWFuIENvZWZmaWNpZW50IiwgCiAgICAgICAgICAgICB0eXBlID0gImxvd2VyIiwgCiAgICAgICAgICAgICBwLm1hdCA9IHJlczEkcCwgCiAgICAgICAgICAgICBzaWcubGV2ZWwgPSAuMDUsIAogICAgICAgICAgICAgbWFyID0gYygwLDAsMSwwKSkKYGBgCgojIyBUaGVvcnkgZGVyaXZlZCwgaW5kdWN0aXZlbHkgYnVpbHQgcmVncmVzc2lvbiBtb2RlbAoKSW4gdGhlIGZpcnN0IHNldCBvZiBtb2RlbHMsIHdlIGF2b2lkIHBvdGVudGlhbGx5IGJpYXNlZCBtb2RpZmljYXRpb25zLCBzdWNoIGFzIHBhaXJ3aXNlIGNvbXBhcmlzb25zLCB3aGljaCBjb3VsZCBsZWFkIHRvIG92ZXJmaXR0aW5nLiBJbnN0ZWFkLCB3ZSBidWlsZCBmb3VyIHN1Y2Nlc3NpdmUgbW9kZWxzIGluIHRvdGFsICgiYmxvY2tzIiBpbiB0aGUgc3ludGF4KS4KCkZpcnN0IG1vZGVsIHVzZXMgb25seSB0aGUgZGVtb2dyYXBoaWMgY2hhcmFjdGVyaXN0aWNzIGFzIHByZWRpY3RvcnMuIFNlY29uZCBtb2RlbCBhZGRzIHRoZSBlZmZlY3Qgb2YgdGhlIHNvY2lhbCBtZWRpYSBjb25zdW1wdGlvbiwgdmlydXMgaW5mb3JtYXRpb24sIGVjb25vbWljIHdvcnJpZXMgYW5kIGh5Z2llbmljIG1lYXN1cmVzLiBUaGlyZCBtb2RlbCBhZGRzIGxpZmVzdHlsZSB2YXJpYWJsZXMsIHN1Y2ggYXMgYWxjb2hvbCwgc21va2luZywgc3BvcnQgYW5kIHNvY2lhbCBjb250YWN0cy4gVGhlIGZvdXJ0aCBtb2RlbCBmdXJ0aGVyIGFkZHMgdGhlIHZhcmlhYmxlcyByZWxhdGVkIHRvIHNlbGYtcmF0ZWQgaGVhbHRoIHF1YWxpdHkuIFRoZSBwZXJmb3JtYW5jZSBvZiBlYWNoIG1vZGVsIGNvdWxkIGJlIHNlZW4gaW4gdGhlIG91dHB1dCBiZWxvdy4KCmBgYHtyIHRoZW9yeS1kcml2ZW4gcmVncmVzc2lvbiBtb2RlbCwgY29tbWVudCA9ICIifQpsaW5yZWdfdGhlb3J5IDwtIGptdjo6bGluUmVnKAogICAgZGF0YSA9IGRhdGEsCiAgICBkZXAgPSAiUEhROF90IiwKICAgIGNvdnMgPSAicTAyX2FnZSIsCiAgICBmYWN0b3JzID0gdmFycygicTAxX2dlbmRlciIsCiAgICAgICAgICAgICAgICAgICAicTAzX3JlbGF0aW9uc2hpcF90eXBlIiwKICAgICAgICAgICAgICAgICAgICJxMDRfY2hpbGRyZW4iLCAKICAgICAgICAgICAgICAgICAgICJxMTFfZWR1Y2F0aW9uIiwgCiAgICAgICAgICAgICAgICAgICAicTE4XzAyX3NvY19tZWRpYSIsIAogICAgICAgICAgICAgICAgICAgInEyMF9wdWJsaWNfaW5mbyIsCiAgICAgICAgICAgICAgICAgICAicTM0XzAyX2ZhY2VfbWFzayIsCiAgICAgICAgICAgICAgICAgICAicTM0XzA3X2hhbmRfd2FzaGluZyIsCiAgICAgICAgICAgICAgICAgICAicTM1XzAxX2NvbnRhY3RfY2xvc2VfZmFtaWx5IiwgCiAgICAgICAgICAgICAgICAgICAicTM1XzAzX2NvbnRhY3RfZnJpZW5kcyIsIAogICAgICAgICAgICAgICAgICAgInEzNl9lY29uX3dvcnJ5IiwKICAgICAgICAgICAgICAgICAgICJxMzhfYWxjb2hvbCIsIAogICAgICAgICAgICAgICAgICAgInE0MF9zbW9raW5nIiwgCiAgICAgICAgICAgICAgICAgICAicTQyX3Nwb3J0IiwgCiAgICAgICAgICAgICAgICAgICAicTQ3X3NlbGZfcmVwb3J0aW5nX2hlYWx0aCIsIAogICAgICAgICAgICAgICAgICAgInE0OF9jaHJvbmljX2lsbG5lc3MiLAogICAgICAgICAgICAgICAgICAgInE0OV9oZWFsdGhfbGltaXRhdGlvbnMiKSwKICAgIGJsb2NrcyA9IGxpc3QoCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgInEwMV9nZW5kZXIiLAogICAgICAgICAgICAicTAyX2FnZSIsCiAgICAgICAgICAgICJxMDNfcmVsYXRpb25zaGlwX3R5cGUiLAogICAgICAgICAgICAicTA0X2NoaWxkcmVuIiwKICAgICAgICAgICAgInExMV9lZHVjYXRpb24iKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICAicTE4XzAyX3NvY19tZWRpYSIsCiAgICAgICAgICAgICJxMjBfcHVibGljX2luZm8iLAogICAgICAgICAgICAicTM0XzAyX2ZhY2VfbWFzayIsCiAgICAgICAgICAgICJxMzRfMDdfaGFuZF93YXNoaW5nIiwKICAgICAgICAgICAgInEzNl9lY29uX3dvcnJ5IiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgInE0MF9zbW9raW5nIiwKICAgICAgICAgICAgInE0Ml9zcG9ydCIsCiAgICAgICAgICAgICJxMzhfYWxjb2hvbCIsCiAgICAgICAgICAgICJxMzVfMDFfY29udGFjdF9jbG9zZV9mYW1pbHkiLAogICAgICAgICAgICAicTM1XzAzX2NvbnRhY3RfZnJpZW5kcyIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgICJxNDdfc2VsZl9yZXBvcnRpbmdfaGVhbHRoIiwKICAgICAgICAgICAgInE0OF9jaHJvbmljX2lsbG5lc3MiLAogICAgICAgICAgICAicTQ5X2hlYWx0aF9saW1pdGF0aW9ucyIpKSwKICAgIHJlZkxldmVscyA9IGxpc3QoCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInEwMV9nZW5kZXIiLAogICAgICAgICAgICByZWYgPSAiZmVtYWxlIiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInEwNF9jaGlsZHJlbiIsCiAgICAgICAgICAgIHJlZiA9ICJubyIpLAogICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTIwX3B1YmxpY19pbmZvIiwKICAgICAgICAgICAgcmVmID0gIm5vIiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInEzNF8wMl9mYWNlX21hc2siLAogICAgICAgICAgICByZWYgPSAibm8iKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTM0XzA3X2hhbmRfd2FzaGluZyIsCiAgICAgICAgICAgIHJlZiA9ICJubyIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxMzZfZWNvbl93b3JyeSIsCiAgICAgICAgICAgIHJlZiA9ICJ2ZXJ5X3NlcmlvdXMiKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTQyX3Nwb3J0IiwKICAgICAgICAgICAgcmVmID0gIm5vIiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInE0MF9zbW9raW5nIiwKICAgICAgICAgICAgcmVmID0gInllcyIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxMzhfYWxjb2hvbCIsCiAgICAgICAgICAgIHJlZiA9ICJ5ZXMiKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTM1XzAxX2NvbnRhY3RfY2xvc2VfZmFtaWx5IiwKICAgICAgICAgICAgcmVmID0gImxlc3Nfb2Z0ZW4iKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTM1XzAzX2NvbnRhY3RfZnJpZW5kcyIsCiAgICAgICAgICAgIHJlZiA9ICJsZXNzX29mdGVuIiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInExOF8wMl9zb2NfbWVkaWEiLAogICAgICAgICAgICByZWYgPSAieWVzIiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInEwM19yZWxhdGlvbnNoaXBfdHlwZSIsCiAgICAgICAgICAgIHJlZiA9ICJzaW5nbGUiKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTQ3X3NlbGZfcmVwb3J0aW5nX2hlYWx0aCIsCiAgICAgICAgICAgIHJlZiA9ICJ2ZXJ5X2JhZCIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxNDlfaGVhbHRoX2xpbWl0YXRpb25zIiwKICAgICAgICAgICAgcmVmID0gImxpbWl0cyIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxMTFfZWR1Y2F0aW9uIiwKICAgICAgICAgICAgcmVmID0gInVuZmluX2VsZW1lbnQiKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTQ4X2Nocm9uaWNfaWxsbmVzcyIsCiAgICAgICAgICAgIHJlZiA9ICJ5ZXMiKSksCiAgICByMkFkaiA9IFRSVUUsCiAgICBhaWMgPSBUUlVFLAogICAgYmljID0gVFJVRSwKICAgIHJtc2UgPSBUUlVFLAogICAgbW9kZWxUZXN0ID0gVFJVRSwKICAgIGFub3ZhID0gVFJVRSwKICAgIGNpID0gVFJVRSwKICAgIHN0ZEVzdCA9IFRSVUUsCiAgICBjaVN0ZEVzdCA9IFRSVUUsCiAgICBkdXJiaW4gPSBUUlVFLAogICAgY29sbGluID0gVFJVRSkKYGBgCgojIyMgUmVncmVzc2lvbiBtb2RlbCBwZXJmb3JtYW5jZSB7LnRhYnNldCAudGFic2V0LXBpbGxzfQoKIyMjIyBNb2RlbCBmaXQgbWVhc3VyZXMKCmBgYHtyLCBjb21tZW50ID0gIiJ9CmxpbnJlZ190aGVvcnkkbW9kZWxGaXQKYGBgCgojIyMjIE1vZGVsIGNvbXBhcmlzb25zCgpgYGB7ciwgY29tbWVudCA9ICIifQpsaW5yZWdfdGhlb3J5JG1vZGVsQ29tcAkJCQkJCmBgYAoKIyMjIyBNb2RlbCBzcGVjaWZpYyByZXN1bHRzCgpgYGB7ciwgY29tbWVudCA9ICIifQpsaW5yZWdfdGhlb3J5JG1vZGVscwkJCQkKYGBgCgojIyBNb2RlbHMgZGVyaXZlZCB3aXRoIHN0ZXB3aXNlIGFsZ29yaXRtCgpBcyBhbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byB0aGUgdGhlb3J5LWRlcml2ZWQsIGluZHVjdGl2ZWx5IGJ1aWxkIHNldCBvZiBtb2RlbHMsIHdlIGNob29zZSB0byB1c2UgdGhlIHN0ZXB3aXNlIHJlZ3Jlc3Npb24gLSBjb21iaW5pbmcgZm9yd2FyZCB3aXRoIHN0ZXB3aXNlIHNlbGVjdGlvbiBvZiB0aGUgcHJlZGljdG9ycy4gQnkgdXNpbmcgYm90aCBvZiB0aGUgQWthaWtlIGluZm9ybWF0aW9uIGNyaXRlcmlvbiAoQUlDKSBhbmQgQmF5ZXNpYW4gaW5mb3JtYXRpb24gY3JpdGVyaW9uIChCSUMpIHRvIHNlbGVjdCB0aGUgYmVzdC1wZXJmb3JtaW5nIG1vZGVsLCB0aGUgYWxnb3JpdGhtIGZyb20gdGhlIGBNQVNTYCBwYWNrYWdlIGFycml2ZXMgYXQgdHdvIHNpbXBsZXIgbW9kZWxzLCBjb21wYXJlZCB0byB0aGUgMTggcHJlZGljdG9yIHZhcmlhYmxlcyBzZWxlY3RlZCB3aXRoIHRoZSBwcmV2aW91cyBtYW51YWwgYXBwcm9hY2guIEhvd2V2ZXIsIHdoaWxlIHRoZXNlIHR3byBtb2RlbHMgcGVyZm9ybSB3ZWxsIHdpdGggdGhpcyBwYXJ0aWN1bGFyIHNhbXBsZSwgdGhlcmUgaXMgYSBzaWduaWZpY2FudCBjaGFuY2Ugb2YgdW5kZXJwZXJmb3JtYW5jZSBvbiB0aGUgaW50ZXJuYXRpb25hbCBzYW1wbGUsIHNpbmNlIHN0ZXB3aXNlIHJlZ3Jlc3Npb24gaXMgcHJvbmUgdG8gb3ZlcmZpdHRpbmcuCgpVc2luZyBBSUMtcmFua2VkIHN0ZXB3aXNlIHNlbGVjdGlvbiwgdGhlIGFsZ29yaXRobSBhcnJpdmVzIGF0IDEzLXByZWRpY3RvciBtb2RlbCBhbmQgd2l0aCBCSUMtcmFua2VkIHNlbGVjdGlvbiBhdCA3LXByZWRpY3RvciBtb2RlbC4KCkluIG9yZGVyIHRvIGFsbG93IGRpcmVjdCBjb21wYXJpc29uIHdpdGggdGhlIG1hbnVhbGx5LXNlbGVjdGVkIG1vZGVsLCB3ZSBpbnB1dCB0aGUgY2hvc2VuIG1vZGVscyAoYmFzZWQgb24gdGhlIEFJQyBhbmQgQklDIGNyaXRlcmlvbikgZnJvbSB0aGUgcHJldmlvdXMgc3RlcCBpbnRvIHRoZSBgbGlucmVnKClgIGZ1bmN0aW9uIG9mIHRoZSBgam12YCBwYWNrYWdlLiBUaGUgZmlyc3QsIHNpbXBsZXIgbW9kZWwgMSBoYXMgdGhlIDcgcHJlZGljdG9ycyBmcm9tIHRoZSBCSUMtc2VsZWN0ZWQgbW9kZWwuIFRoZSBtb2RlbCAyLCBoYXMgNiBhZGRpdGlvbmFsIHZhcmlhYmxlcyBmcm9tIEFJQy1zZWxlY3RlZCBzdGVwd2lzZSBtb2RlbCAodG8gYSB0b3RhbCBvZiAxMykuCgpgYGB7ciBhdXRvbWF0aWMgc3RlcHdpc2UgcmVncmVzc2lvbiBtb2RlbCwgY29tbWVudCA9ICIifQojIFdlIGFyZSB1c2luZyB0aGUgTUFTUyBwYWNrYWdlLCB3aGljaCBjb250YWlucyBzdGVwQUlDKCkgZnVuY3Rpb24gZm9yIHN0ZXB3aXNlIAojIHJlZ3Jlc3Npb24gbW9kZWwgc2VsZWN0aW9uLiBXZSBhZ2FpbiBmaWx0ZXIgdGhlIGRhdGFzZXQgdG8gb25seSB0aGUgdmFyaWFibGVzIAojIHNwZWNpZmllZCB3aXRoIGh5cG90aGVzZXMKCmxpbnJlZ19zdGVwd2lzZSA8LSBkYXRhICU+JSBkcGx5cjo6c2VsZWN0KC1jKGlkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxMDJfYWdlX2dyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEzMF9jb25jZXJuX2luZmVjdGlvbl9jb3ZpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxMzFfY29uY2Vybl9pbmZlY3Rpb25fZnJpZW5kcywgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcTMzXzAxX2NvbmNlcm5fc2l0dWF0aW9uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxMzNfMDJfY29uY2Vybl9sb3dfY29udHJvbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcTMzXzAzX2NvbmNlcm5fc3Vydml2YWxfY292aWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEzM18wNF9jb25jZXJuX2NoYW5nZV9lbXBsb3ltZW50LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxMzNfMDVfY29uY2Vybl9pbmZlY3Rpbmdfb3RoZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHE1MF9jb21tZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBIUTgpKQoKIyBGaXQgdGhlIGZ1bGwgbGluZWFyIG1vZGVsIHVzaW5nIGxtKCkgZnVuY3Rpb24gZnJvbSBiYXNlIFIKZnVsbC5tb2RlbF9NQVNTIDwtIGxtKFBIUThfdCB+LiwKICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBsaW5yZWdfc3RlcHdpc2UsCiAgICAgICAgICAgICAgICAgICAgICBuYS5hY3Rpb24gPSBuYS5vbWl0KQoKIyBTdGVwd2lzZSByZWdyZXNzaW9uIG1vZGVsIHVzaW5nIE1BU1MgcGFja2FnZSwgcmFua3Mgb24gQUlDCnN0ZXAubW9kZWxfQUlDIDwtIHN0ZXBBSUMoZnVsbC5tb2RlbF9NQVNTLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiYm90aCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlID0gRkFMU0UpCgojIFN0ZXB3aXNlIHJlZ3Jlc3Npb24gbW9kZWwgdXNpbmcgTUFTUyBwYWNrYWdlLCByYW5rcyBvbiBCSUMKc3RlcC5tb2RlbF9CSUMgPC0gc3RlcEFJQyhmdWxsLm1vZGVsX01BU1MsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJib3RoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZSA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gbG9nKG5yb3cobGlucmVnX3N0ZXB3aXNlKSkpCgojIFRvIGNvbnN0cnVjdCB0aGlzIHJlZ3Jlc3Npb24gbW9kZWwsIHdlIHVzZSB0aGUgbGluUmVnKCkgCiMgZnVuY3Rpb24gZnJvbSB0aGUgam12IHBhY2thZ2UuCgpsaW5yZWdfc3RlcHdpc2UyIDwtIGptdjo6bGluUmVnKAogICAgZGF0YSA9IGRhdGEsCiAgICBkZXAgPSAiUEhROF90IiwKICAgIGNvdnMgPSAicTAyX2FnZSIsCiAgICBmYWN0b3JzID0gdmFycygicTAxX2dlbmRlciIsCiAgICAgICAgICAgICAgICAgICAicTAzX3JlbGF0aW9uc2hpcF90eXBlIiwKICAgICAgICAgICAgICAgICAgICJxMDRfY2hpbGRyZW4iLCAKICAgICAgICAgICAgICAgICAgICJxMThfMDJfc29jX21lZGlhIiwgCiAgICAgICAgICAgICAgICAgICAicTIwX3B1YmxpY19pbmZvIiwKICAgICAgICAgICAgICAgICAgICJxMzRfMDJfZmFjZV9tYXNrIiwKICAgICAgICAgICAgICAgICAgICJxMzZfZWNvbl93b3JyeSIsCiAgICAgICAgICAgICAgICAgICAicTM4X2FsY29ob2wiLCAKICAgICAgICAgICAgICAgICAgICJxNDBfc21va2luZyIsIAogICAgICAgICAgICAgICAgICAgInE0N19zZWxmX3JlcG9ydGluZ19oZWFsdGgiLCAKICAgICAgICAgICAgICAgICAgICJxNDhfY2hyb25pY19pbGxuZXNzIiwKICAgICAgICAgICAgICAgICAgICJxNDlfaGVhbHRoX2xpbWl0YXRpb25zIiksCiAgICBibG9ja3MgPSBsaXN0KAogICAgICAgIGxpc3QoCiAgICAgICAgICAgICJxMDFfZ2VuZGVyIiwKICAgICAgICAgICAgInEwMl9hZ2UiLAogICAgICAgICAgICAicTA0X2NoaWxkcmVuIiwKICAgICAgICAgICAgInEzNl9lY29uX3dvcnJ5IiwKICAgICAgICAgICAgInExOF8wMl9zb2NfbWVkaWEiLAogICAgICAgICAgICAicTQ3X3NlbGZfcmVwb3J0aW5nX2hlYWx0aCIsCiAgICAgICAgICAgICJxNDlfaGVhbHRoX2xpbWl0YXRpb25zIiksCiAgICAgICAgICBsaXN0KAogICAgICAgICAgICAicTAzX3JlbGF0aW9uc2hpcF90eXBlIiwKICAgICAgICAgICAgInEyMF9wdWJsaWNfaW5mbyIsCiAgICAgICAgICAgICJxMzRfMDJfZmFjZV9tYXNrIiwKICAgICAgICAgICAgInEzOF9hbGNvaG9sIiwKICAgICAgICAgICAgInE0MF9zbW9raW5nIiwKICAgICAgICAgICAgInE0OF9jaHJvbmljX2lsbG5lc3MiKSksCiAgICByZWZMZXZlbHMgPSBsaXN0KAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxMDFfZ2VuZGVyIiwKICAgICAgICAgICAgcmVmID0gImZlbWFsZSIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxMDRfY2hpbGRyZW4iLAogICAgICAgICAgICByZWYgPSAibm8iKSwKICAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInEyMF9wdWJsaWNfaW5mbyIsCiAgICAgICAgICAgIHJlZiA9ICJubyIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxMzRfMDJfZmFjZV9tYXNrIiwKICAgICAgICAgICAgcmVmID0gIm5vIiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInEzNl9lY29uX3dvcnJ5IiwKICAgICAgICAgICAgcmVmID0gInZlcnlfc2VyaW91cyIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxNDBfc21va2luZyIsCiAgICAgICAgICAgIHJlZiA9ICJ5ZXMiKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTM4X2FsY29ob2wiLAogICAgICAgICAgICByZWYgPSAieWVzIiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInExOF8wMl9zb2NfbWVkaWEiLAogICAgICAgICAgICByZWYgPSAieWVzIiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInEwM19yZWxhdGlvbnNoaXBfdHlwZSIsCiAgICAgICAgICAgIHJlZiA9ICJzaW5nbGUiKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTQ3X3NlbGZfcmVwb3J0aW5nX2hlYWx0aCIsCiAgICAgICAgICAgIHJlZiA9ICJ2ZXJ5X2JhZCIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxNDlfaGVhbHRoX2xpbWl0YXRpb25zIiwKICAgICAgICAgICAgcmVmID0gImxpbWl0cyIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxNDhfY2hyb25pY19pbGxuZXNzIiwKICAgICAgICAgICAgcmVmID0gInllcyIpKSwKICAgIHIyQWRqID0gVFJVRSwKICAgIGFpYyA9IFRSVUUsCiAgICBiaWMgPSBUUlVFLAogICAgcm1zZSA9IFRSVUUsCiAgICBtb2RlbFRlc3QgPSBUUlVFLAogICAgYW5vdmEgPSBUUlVFLAogICAgY2kgPSBUUlVFLAogICAgc3RkRXN0ID0gVFJVRSwKICAgIGNpU3RkRXN0ID0gVFJVRSwKICAgIGR1cmJpbiA9IFRSVUUsCiAgICBjb2xsaW4gPSBUUlVFKQpgYGAKCiMjIyBTdGVwd2lzZSBtb2RlbCBwZXJmb3JtYW5jZSB7LnRhYnNldCAudGFic2V0LXBpbGxzfQoKIyMjIyBBSUMtc2VsZWN0ZWQgbW9kZWwgc3VtbWFyeQoKYGBge3IsIGNvbW1lbnQgPSAiIn0KYmFzZTo6c3VtbWFyeShzdGVwLm1vZGVsX0FJQykKYGBgCgojIyMjIEJJQy1zZWxlY3RlZCBtb2RlbCBzdW1tYXJ5CgpgYGB7ciwgY29tbWVudCA9ICIifQpiYXNlOjpzdW1tYXJ5KHN0ZXAubW9kZWxfQklDKQpgYGAKCiMjIyMgU3RlcHdpc2UgbW9kZWwgZml0IG1lYXN1cmVzCgpgYGB7ciwgY29tbWVudCA9ICIifQpsaW5yZWdfc3RlcHdpc2UyJG1vZGVsRml0CmBgYAoKIyMjIyBTdGVwd2lzZSBtb2RlbCBjb21wYXJpc29ucwoKYGBge3IsIGNvbW1lbnQgPSAiIn0KbGlucmVnX3N0ZXB3aXNlMiRtb2RlbENvbXAJCQkJCQpgYGAKCiMjIyMgU3RlcHdpc2UgbW9kZWwgc3BlY2lmaWMgcmVzdWx0cwoKYGBge3IsIGNvbW1lbnQgPSAiIn0KbGlucmVnX3N0ZXB3aXNlMiRtb2RlbHMJCQkJCmBgYAoKIyBDb3ZpZC0xOSBjb25jZXJuIGZhY3RvciBhcyBhIG1lZGlhdG9yIGZvciBkZXByZXNzaW9uCgojIyBDcmVhdGlvbiBvZiB0aGUgQ292aWQtMTkgY29uY2VybiBpbmRleCwgc3RlcCAxOiBvdmVydmlldyBvZiBzdXJ2ZXkgaXRlbXMKCkFzaWRlIGZyb20gdGhlIHJlZ3Jlc3Npb24gbW9kZWwsIHdlIGludGVuZCB0byBleHBsb3JlIHRoZSBtZWRpYXRpbmcgcm9sZSBvZiBjb25jZXJuL2FueGlldHkgYmV0d2VlbiB0aGUgY29uc3VtcHRpb24gb2Ygc29jaWFsIG1lZGlhIGFuZCBkZXByZXNzaW9uIHRocm91Z2ggYSBtZWRpYXRpb24vbW9kZXJhdGlvbiBhbmFseXNpcyAoaW4gc2VjdGlvbiA1KS4KClVubGlrZSBhcyBpcyBpbiB0aGUgY2FzZSBvZiBQSFEtOCBpbmRleCBhcyBhIG1lYXN1cmUgb2YgZGVwcmVzc2lvbiwgdGhpcyBzdXJ2ZXkgZG9lcyBub3QgaGF2ZSBhIHN0YW5kYXJkaXplZCBtZWFzdXJlIG9mIG9mIENvdmlkLTE5IGNvbmNlcm4gb3IgYW54aWV0eS4gV2UgdGhlcmVmb3JlIHRyeSB0byBwcm9jZWVkIGluZHVjdGl2ZWx5LCB1c2luZyBDb3ZpZC0xOS1yZWxhdGVkIHN1cnZleSBpdGVtcyB0aGF0IGNvdWxkIHJlcHJlc2VudCB0aGUgdW5kZXJseWluZyBjb25zdHJ1Y3QuCgpUaGVyZWZvcmUsIGluIHRoaXMgc2VjdGlvbiwgd2UgYWltIHRvIGNvbnN0cnVjdCBhIENvdmlkLTE5IGNvbmNlcm4gaW5kZXggZnJvbSBzZXZlcmFsIHN1cnZleSBpdGVtcyB1c2luZyBmYWN0b3IgYW5hbHlzaXMuIEFzIGEgZmlyc3Qgc3RlcCwgd2Ugc2VsZWN0IHRoZSBzdXJ2ZXkgaXRlbXMsIHdoaWNoIHNob3VsZCBiZSB0aGUgbWFuaWZlc3RhdGlvbiBvZiB0aGUgbGF0ZW50IGZhY3RvciBvZiBDb3ZpZC0xOS1yZWxhdGVkIGNvbmNlcm4vYW54aWV0eS4KClRoZXNlIHN1cnZleSBpdGVtcyBhcmU6CgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBTdXJ2ZXkgcXVlc3Rpb24gKDEtMTAgc2NhbGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3JpZ2luYWwgdmFyaWFibGUgfCBSZW5hbWVkIHZhcmlhYmxlIG5hbWUgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IEhvdyBzY2FyZWQgYXJlIHlvdSBvZiB0aGUgcmlzayBvZiBnZXR0aW5nIHNpY2s/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxMzAgICAgICAgICAgICAgICB8IHEzMF9jb25jZXJuX2luZmVjdGlvbl9jb3ZpZCAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgSG93IHNjYXJlZCBhcmUgeW91IG9mIHRoZSByaXNrIHRoYXQgc29tZW9uZSBpbiB5b3VyIGZhbWlseSBvciBuZXR3b3JrIG9mIGZyaWVuZHMgd2lsbCBnZXQgQ09WSUQtMTk/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHEzMSAgICAgICAgICAgICAgIHwgcTMxX2NvbmNlcm5faW5mZWN0aW9uX2ZyaWVuZHMgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBJIGZlZWwgdmVyeSBhbnhpb3VzIGFib3V0IHRoZSBoZWFsdGggZW1lcmdlbmN5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcTMzXzAxICAgICAgICAgICAgfCBxMzNfMDFfY29uY2Vybl9zaXR1YXRpb24gICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IEkgdGhpbmsgSSBoYXZlIGxpdHRsZSBjb250cm9sIG92ZXIgd2hldGhlciBJIGdldCB0aGUgaW5mZWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxMzNfMDIgICAgICAgICAgICB8IHEzM18wMl9jb25jZXJuX2xvd19jb250cm9sICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgSSBhbSBzY2FyZWQgdGhhdCBJIHdpbGwgbm90IGJlIGFibGUgdG8gc3Vydml2ZSBpZiBJIGdldCBzaWNrIGR1ZSB0byBDT1ZJRC0xOSBvciBJIGdvdCBzaWNrIGFuZCBJIHdhcyBzY2FyZWQgdGhhdCBJIHdvdWxkIG5vdCBzdXJ2aXZlLiB8IHEzM18wMyAgICAgICAgICAgIHwgcTMzXzAzX2NvbmNlcm5fc3Vydml2YWxfY292aWQgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBJIHRob3VnaHQgYWJvdXQgcXVpdHRpbmcgbXkgam9iIC8gZHJvcHBpbmcgb3V0IG9mIHNjaG9vbCBkdWUgdG8gQ09WSUQtMTkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcTMzXzA0ICAgICAgICAgICAgfCBxMzNfMDRfY29uY2Vybl9jaGFuZ2VfZW1wbG95bWVudCB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IEkgYW0gYWZyYWlkIG9mIHRyYW5zbWl0dGluZyB0aGUgY29yb25hdmlydXMgdG8gb3RoZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxMzNfMDUgICAgICAgICAgICB8IHEzM18wNV9jb25jZXJuX2luZmVjdGluZ19vdGhlcnMgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgojIyBDcmVhdGlvbiBvZiB0aGUgQ292aWQtMTkgY29uY2VybiBpbmRleCwgc3RlcCAyOiBzdXJ2ZXkgaXRlbXMgZGVzY3JpcHRpdmVzIGFuZCBwcmUtcHJvY2Vzc2luZwoKQWZ0ZXIgdGhlIGluaXRpYWwgc2VsZWN0aW9uLCB3ZSBhbmFseXplIHRoZXNlIHN1cnZleSBpdGVtcyB3aXRoIGEgc2V0IG9mIGRlc2NyaXB0aXZlIHN0YXRpc3RpY3MuIFRvIGZvbGxvdyB0aGUgZXN0YWJsaXNoZWQgcHJpbmNpcGxlcyBwZXJ0YWluaW5nIHRvIHRoZSBmYWN0b3IgYW5hbHlzZXMsIHdlIGFsc28gc3BsaXQgdGhlIHNhbXBsZSBpbnRvIHR3byByYW5kb21seSBjaG9zZW4gaGFsdmVzIFtAQ2FicmVyYS1OZ3V5ZW4yMDEwXS4gVGhlIGZpcnN0IGhhbGYgb2YgdGhlIGRhdGEgc2V0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIEV4cGxvcmF0b3J5IEZhY3RvciBBbmFseXNpcywgd2hpbGUgdGhlIHNlY29uZCBoYWxmIHdpbGwgYmUgdXNlZCBieSB0aGUgUmVsaWFiaWxpdHkgYW5kIENvbmZpcm1hdG9yeSBGYWN0b3IgQW5hbHlzZXMgKGFsbCBmdW5jdGlvbnMgZnJvbSBgam12YCBwYWNrYWdlKS4KCmBgYHtyIGNvbmNlcm4gaXRlbXMgZGVzY3JpcHRpdmVzLCBjb21tZW50ID0gIiJ9CmFueF9pdGVtc19kZXNjcmlwdGl2ZXMgPC0gam12OjpkZXNjcmlwdGl2ZXMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnMgPSB2YXJzKCJxMzBfY29uY2Vybl9pbmZlY3Rpb25fY292aWQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJxMzFfY29uY2Vybl9pbmZlY3Rpb25fZnJpZW5kcyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInEzM18wMV9jb25jZXJuX3NpdHVhdGlvbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInEzM18wMl9jb25jZXJuX2xvd19jb250cm9sIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicTMzXzAzX2NvbmNlcm5fc3Vydml2YWxfY292aWQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJxMzNfMDRfY29uY2Vybl9jaGFuZ2VfZW1wbG95bWVudCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInEzM18wNV9jb25jZXJuX2luZmVjdGluZ19vdGhlcnMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpc3QgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXggPSBGQUxTRSkKCiMgV2UgYWxzbyBzcGxpdCB0aGUgc2FtcGxlIGludG8gdHdvIGhhbHZlcy4gVGhlICJ0cmFpbmluZyIgaGFsZiwgb24gd2hpY2ggd2UgCiMgY29uZHVjdCB0aGUgRUZBIGFuYWx5c2lzIGFuZCAidGVzdCIgcGFydCwgb24gd2hpY2ggd2UgCiMgdGVzdCBvdXIgY29uc3RydWN0IHRocm91Z2ggQ0ZBLgoKc2V0LnNlZWQoMjAyMSkKdHJhaW5fc2V0IDwtIGRhdGEgJT4lIHNsaWNlX3NhbXBsZShuID0gNzQyKQp0ZXN0X3NldCA8LSBzZXRkaWZmKGRhdGEsdHJhaW5fc2V0KQpgYGAKCiMjIyBDb25jZXJuIGl0ZW1zIHJlc3VsdHMgey50YWJzZXQgLnRhYnNldC1waWxsc30KCiMjIyMgUGxvdHMKCmBgYHtyLCBjb21tZW50ID0gIiJ9CmFueF9pdGVtc19kZXNjcmlwdGl2ZXMkcGxvdHMKYGBgCgojIyMjIERlc2NyaXB0aXZlcwoKYGBge3IsIGNvbW1lbnQgPSAiIn0KYW54X2l0ZW1zX2Rlc2NyaXB0aXZlcyRkZXNjcmlwdGl2ZXMJCmBgYAoKIyMgQ3JlYXRpb24gb2YgdGhlIENvdmlkLTE5IGNvbmNlcm4gaW5kZXgsIHN0ZXAgMzogRXhwbG9yYXRvcnkgRmFjdG9yIEFuYWx5c2lzIG9mIHN1cnZleSBpdGVtcwoKSW4gdGhlIG5leHQgc3RlcCwgd2UgY29uZHVjdCBhbiBFeHBsb3JhdG9yeSBGYWN0b3IgQW5hbHlzaXMgb24gdGhlc2UgdmFyaWFibGVzLgoKSW4gbGluZSB3aXRoIGJlc3QgcHJhY3RpY2VzLCB3ZSBjb25kdWN0IHRoZSBhc3N1bXB0aW9uIGNoZWNrcyAoS01PIGFuZCBCYXJ0bGV0dCdzIFNwaGVyaWNpdHkgdGVzdHMpLCBzZXQgYSBjdXRvZmYgZm9yIGVpZ2VudmFsdWUgb2YgXD4xIGFuZCBoaWRlIGZhY3RvciBsb2FkaW5nIGJlbG93IDAuNC4KClRoZSByZXN1bHQgaXMgdGhlcmVmb3JlIGEgb25lLWZhY3RvciBjb25zdHJ1Y3QsIHdoaWNoIGluY2x1ZGVzIGFsbCBvZiB0aGUgdmFyaWFibGVzLCBleGNlcHQgZm9yIHRoZSBgcTMzXzA0X2NvbmNlcm5fY2hhbmdlX2VtcGxveW1lbnRgLCB3aGljaCBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgZ29vZCBmaXQgZm9yIHRoZSBtYW5pZmVzdGF0aW9uIG9mIENvdmlkLTE5IGNvbmNlcm4gd2l0aGluIHRoaXMgZ3JvdXAgb2YgdmFyaWFibGVzLiBXZSB3aWxsIGV4Y2x1ZGUgdGhpcyB2YXJpYWJsZSBpbiB0aGUgbmV4dCBzdGVwLgoKYGBge3IgY29uY2VybiBpdGVtcyBFeHBsb3JhdG9yeSBGYWN0b3IgQW5hbHlzaXMsIGNvbW1lbnQgPSAiIn0KIyBUbyBjb25kdWN0IHRoZSBFRkEsIHdlIHVzZSB0aGUgZWZhKCkgZnVuY3Rpb24gZnJvbSB0aGUgam12IHBhY2thZ2Ugb24gCiMgdGhlICJ0cmFpbiIgZGF0YSBzZXQgKGFzIG9wcG9zZWQgdG8gdGhlICJ0ZXN0IiBkYXRhc2V0IHVzZWQgZm9yIENGQSkuCgpqbXY6OmVmYSgKICAgIGRhdGEgPSB0cmFpbl9zZXQsCiAgICB2YXJzID0gdmFycygicTMwX2NvbmNlcm5faW5mZWN0aW9uX2NvdmlkIiwgCiAgICAgICAgICAgICAgICAicTMxX2NvbmNlcm5faW5mZWN0aW9uX2ZyaWVuZHMiLCAKICAgICAgICAgICAgICAgICJxMzNfMDFfY29uY2Vybl9zaXR1YXRpb24iLCAKICAgICAgICAgICAgICAgICJxMzNfMDJfY29uY2Vybl9sb3dfY29udHJvbCIsIAogICAgICAgICAgICAgICAgInEzM18wM19jb25jZXJuX3N1cnZpdmFsX2NvdmlkIiwgCiAgICAgICAgICAgICAgICAicTMzXzA0X2NvbmNlcm5fY2hhbmdlX2VtcGxveW1lbnQiLCAKICAgICAgICAgICAgICAgICJxMzNfMDVfY29uY2Vybl9pbmZlY3Rpbmdfb3RoZXJzIiksCiAgICBuRmFjdG9yTWV0aG9kID0gImVpZ2VuIiwKICAgIG5GYWN0b3JzID0gMSwKICAgIG1pbkVpZ2VuID0gMSwKICAgIHJvdGF0aW9uID0gInByb21heCIsCiAgICBoaWRlTG9hZGluZ3MgPSAwLjQsCiAgICBzY3JlZVBsb3QgPSBUUlVFLAogICAgZmFjdG9yU3VtbWFyeSA9IFRSVUUsCiAgICBrbW8gPSBUUlVFLAogICAgYmFydGxldHQgPSBUUlVFKQpgYGAKCiMjIENyZWF0aW9uIG9mIHRoZSBDb3ZpZC0xOSBjb25jZXJuIGluZGV4LCBzdGVwIDM6IFJlbGlhYmlsaXR5IEFuYWx5c2lzIG9mIHRoZSBpbmRleCBpdGVtcwoKU2Vjb25kbHksIHdlIGNvbmR1Y3QgYSBSZWxpYWJpbGl0eSBBbmFseXNpcyBvZiB0aGUgQ292aWQtMTkgY29uY2VybiBmYWN0b3IuIFdlIHVzZSBhIGN1dG9mZiB2YWx1ZSBvZiAwLjcgZm9yIGJvdGggTWNEb25hbGQncyBPbWVnYSBhbmQgQ3JvbmJhY2gncyBBbHBoYS4gVGhlIHNjYWxlIHBhc3NlcyB0aGlzIGN1dG9mZiBhbmQgdGhlIHN0YXRpc3RpY3Mgd291bGQgbm90IGJlIGltcHJvdmVkIGlmIGFueSBvZiB0aGUgaXRlbXMgd2VyZSBkcm9wcGVkLgoKYGBge3IgY29uY2VybiBpbmRleCByZWxpYWJpbGl0eSBhbmFseXNpcywgY29tbWVudCA9ICIifQojIFRvIGNvbmR1Y3QgdGhlIHJlbGlhYmlsaXR5IGFuYWx5c2lzLCB3ZSB1c2UgdGhlIHJlbGlhYmlsaXR5KCkgZnVuY3Rpb24gZnJvbSB0aGUgCiMgIGptdiBwYWNrYWdlIG9uIHRoZSAidGVzdCIgZGF0YSBzZXQgKGFzIG9wcG9zZWQgdG8gdGhlICJ0cmFpbiIgZGF0YXNldCB1c2VkIGZvciBFRkEpLgoKam12OjpyZWxpYWJpbGl0eSgKICAgIGRhdGEgPSB0ZXN0X3NldCwKICAgIHZhcnMgPSB2YXJzKCJxMzBfY29uY2Vybl9pbmZlY3Rpb25fY292aWQiLCAKICAgICAgICAgICAgICAgICJxMzFfY29uY2Vybl9pbmZlY3Rpb25fZnJpZW5kcyIsIAogICAgICAgICAgICAgICAgInEzM18wMV9jb25jZXJuX3NpdHVhdGlvbiIsIAogICAgICAgICAgICAgICAgInEzM18wMl9jb25jZXJuX2xvd19jb250cm9sIiwgCiAgICAgICAgICAgICAgICAicTMzXzAzX2NvbmNlcm5fc3Vydml2YWxfY292aWQiLCAKICAgICAgICAgICAgICAgICJxMzNfMDVfY29uY2Vybl9pbmZlY3Rpbmdfb3RoZXJzIiksCiAgICBvbWVnYVNjYWxlID0gVFJVRSwKICAgIGFscGhhSXRlbXMgPSBUUlVFLAogICAgb21lZ2FJdGVtcyA9IFRSVUUpCmBgYAoKIyMgQ3JlYXRpb24gb2YgdGhlIENvdmlkLTE5IGNvbmNlcm4gaW5kZXgsIHN0ZXAgNDogQ29uZmlybWF0b3J5IEZhY3RvciBBbmFseXNpcyBvZiB0aGUgaW5kZXggaXRlbXMKCkFjY29yZGluZyB0byB0aGUgW2NvbW1vbmx5IHVzZWQgY3V0LW9mZnNdKGh0dHBzOi8vd3d3LmNzY3UuY29ybmVsbC5lZHUvbmV3cy9IYW5kb3V0cy9TRU1fZml0LnBkZikgZm9yIGVzdGltYXRpbmcgQ0ZBIGZpdCwgd2UgcmVwb3J0IHRoYXQgdGhlIFN0YW5kYXJkaXplZCBSb290IE1lYW4gU3F1YXJlIFJlc2lkdWFsIGlzIDAuMDUyMSAoY3V0LW9mZiBTUk1SIFw8MC4wOCksIHdoaWNoIGluZGljYXRlcyBhIGdvb2QgZml0LiBIb3dldmVyLCBSb290IE1lYW4gU3F1YXJlIEVycm9yIG9mIEFwcHJveGltYXRpb24gKDkwJSBDSSkgaXMgMC4xMzAtMC4xNzEgKGN1dC1vZmYgXDwgMC4wOCksIHRoZSBDb21wYXJhdGl2ZSBGaXQgSW5kZXggaXMgMC44ODcgKGN1dC1vZmYgQ0ZJIOKJpS45MCksIGFuZCB0aGUgY2hpLXNxdWFyZSB0ZXN0IHZhbHVlIGlzIDE1OSAocCBcPCAwLjAwMSksIHdoaWNoIGRvZXMgbm90IGluZGljYXRlIGEgZ29vZC1maXQuCgpgYGB7ciBjb25jZXJuIGluZGV4IENvbmZpcm1hdG9yeSBGYWN0b3IgQW5hbHlzaXMsIGNvbW1lbnQgPSAiIn0KIyBUbyBjb25kdWN0IHRoZSBDRkEsIHdlIHVzZSB0aGUgY2ZhKCkgZnVuY3Rpb24gZnJvbSB0aGUgam12IHBhY2thZ2Ugb24gdGhlICJ0ZXN0IiAKIyBkYXRhIHNldCAoYXMgb3Bwb3NlZCB0byB0aGUgInRyYWluIiBkYXRhc2V0IHVzZWQgZm9yIEVGQSkuCgpqbXY6OmNmYSgKICAgIGRhdGEgPSB0ZXN0X3NldCwKICAgIGZhY3RvcnMgPSBsaXN0KAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIGxhYmVsID0gIkNvbmNlcm4iLAogICAgICAgICAgICB2YXJzID0gYygKICAgICAgICAgICAgICAgICJxMzBfY29uY2Vybl9pbmZlY3Rpb25fY292aWQiLAogICAgICAgICAgICAgICAgInEzMV9jb25jZXJuX2luZmVjdGlvbl9mcmllbmRzIiwKICAgICAgICAgICAgICAgICJxMzNfMDFfY29uY2Vybl9zaXR1YXRpb24iLAogICAgICAgICAgICAgICAgInEzM18wMl9jb25jZXJuX2xvd19jb250cm9sIiwKICAgICAgICAgICAgICAgICJxMzNfMDNfY29uY2Vybl9zdXJ2aXZhbF9jb3ZpZCIsCiAgICAgICAgICAgICAgICAicTMzXzA1X2NvbmNlcm5faW5mZWN0aW5nX290aGVycyIpKSksCiAgICByZXNDb3YgPSBsaXN0KCksCiAgICBjaSA9IFRSVUUsCiAgICBzdGRFc3QgPSBUUlVFLAogICAgZmFjdENvdkVzdCA9IEZBTFNFLAogICAgZml0TWVhc3VyZXMgPSBjKCJjZmkiLCAidGxpIiwgInJtc2VhIiwgInNybXIiKSwKICAgIGNvclJlcyA9IFRSVUUpCmBgYAoKIyMgQ3JlYXRpb24gb2YgQ292aWQtMTkgY29uY2VybiBpbmRleCwgc3RlcCA1OiBjcmVhdGlvbiwgZGVzY3JpcHRpdmVzIGFuZCB1cGRhdGVkIGNvcnJlbGF0aW9uIHBsb3QKCkFmdGVyIFJlbGlhYmlsaXR5IEFuYWx5c2lzIGFuZCBDRkEsIHdlIGNvbWJpbmUgdGhlIG11bHRpcGxlIHZhcmlhYmxlcyBpbnRvIG9uZSBuYW1lZCBgY29uY2Vybl9pbmRleGAuIFdlIGFsc28gcmVuZGVyIHZpc3VhbGl6YXRpb24gYW5kIGRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgZm9yIHRoZSBuZXcgYGNvbmNlcm5faW5kZXhgIHZhcmlhYmxlLgoKYGBge3IgY29uY2VybiBpbmRleCBjcmVhdGlvbiBhbmQgZGVzY3JpcHRpdmVzLCBjb21tZW50ID0gIiJ9CiMgQ3JlYXRpbmcgdGhlIENvdmlkLTE5LXJlbGF0ZWQgY29uY2Vybi9hbnhpZXR5IGluZGV4LCBjb25zaXN0aW5nIG9mIHRoZSBhdmVyYWdlIG9mIAojIHRoZSB2YWx1ZXMgb2YgdGhlIG11bHRpcGxlIHZhcmlhYmxlcyBzZWxlY3RlZCB0aHJvdWdoIGZhY3RvciBhbmFseXNpcyB0bwojIHJlcHJlc2VudCB0aGUgdW5kZXJseWluZyBjb25zdHJ1Y3QuCgpjb25jZXJuX2luZGV4IDwtIGFwcGx5KGNiaW5kKGRhdGEkcTMwX2NvbmNlcm5faW5mZWN0aW9uX2NvdmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEkcTMxX2NvbmNlcm5faW5mZWN0aW9uX2ZyaWVuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSRxMzNfMDFfY29uY2Vybl9zaXR1YXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSRxMzNfMDJfY29uY2Vybl9sb3dfY29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhJHEzM18wM19jb25jZXJuX3N1cnZpdmFsX2NvdmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEkcTMzXzA1X2NvbmNlcm5faW5mZWN0aW5nX290aGVycyksIDEsIG1lYW4pCgojQWRkaW5nIHRoZSB2ZWN0b3IgYXMgYW4gY29sdW1uIHRvIHRoZSBleGlzdGluZyBkYXRhc2V0LgoKZGF0YSA8LSBjYmluZChkYXRhLCBjb25jZXJuX2luZGV4KQpkYXRhX2NvcnIgPC0gY2JpbmQoZGF0YV9jb3JyLCBjb25jZXJuX2luZGV4KQoKI1RvIHN1bW1hcml6ZSB0aGUgY29uY2Vybl9pbmRleCB2YXJpYWJsZSwgd2UgdXNlIHRoZSBkZXNjcmlwdGl2ZXMoKSAKIyBmdW5jdGlvbiBmcm9tIHRoZSBqbXYgcGFja2FnZS4KCmFueF9pbmRleF9kZXNjcmlwdGl2ZXMgPC0gam12OjpkZXNjcmlwdGl2ZXMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFycyA9ICJjb25jZXJuX2luZGV4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZCA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFuID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGMgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3ggPSBUUlVFKQoKIyBGdW5jdGlvbiB0byBnZXQgdGhlIHJlc3VsdCBmcm9tIHRoZSBjb3JyZWxhdGlvbiBtYXRyaXggaW50byBhIGRhdGEgZnJhbWUKZmxhdHRlbkNvcnJNYXRyaXggPC0gZnVuY3Rpb24oY29ybWF0LCBwbWF0KSB7CiAgdXQgPC0gdXBwZXIudHJpKGNvcm1hdCkKICBkYXRhLmZyYW1lKAogICAgcm93ID0gcm93bmFtZXMoY29ybWF0KVtyb3coY29ybWF0KVt1dF1dLAogICAgY29sdW1uID0gcm93bmFtZXMoY29ybWF0KVtjb2woY29ybWF0KVt1dF1dLAogICAgY29yID0gKGNvcm1hdClbdXRdLAogICAgcCA9IHBtYXRbdXRdCiAgICApCn0KCiNDb3JyZWxhdGlvbiBtYXRyaXggdXNpbmcgU3BlYXJtYW4gY29lZmZpY2llbnQgCmNvcnJfbXR4IDwtIHJjb3JyKGFzLm1hdHJpeChkYXRhX2NvcnIpLCB0eXBlID0gInNwZWFybWFuIikKIAojIFNlbGVjdGluZyBvbmx5IHNpZ25pZmljYW50IGNvcnJlbGF0ZXMgZm9yIFBIUTggKHZhbHVlcyB3aXRoIHA+MC4wNSBhcmUgZXhjbHVkZWQpCmZsYXR0ZW5Db3JyTWF0cml4KGNvcnJfbXR4JHIsIGNvcnJfbXR4JFApICU+JSBmaWx0ZXIocCA8PSAwLjA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiAlaW4lIGMoIlBIUThfdCIpKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJhbmdlKGRlc2MoYWJzKGNvcikpKQoKIyBTZWxlY3Rpbmcgb25seSBzaWduaWZpY2FudCBjb3JyZWxhdGVzIGZvciBjb25jZXJuIGluZGV4ICh2YWx1ZXMgd2l0aCBwPjAuMDUgYXJlIGV4Y2x1ZGVkKQpmbGF0dGVuQ29yck1hdHJpeChjb3JyX210eCRyLCBjb3JyX210eCRQKSAlPiUgZmlsdGVyKHAgPD0gMC4wNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gJWluJSBjKCJjb25jZXJuX2luZGV4IikpICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmFuZ2UoZGVzYyhhYnMoY29yKSkpCmBgYAoKIyMjIENvdmlkLTE5IGNvbmNlcm4gaW5kZXggcmVzdWx0cyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQoKIyMjIyBQbG90cwoKYGBge3IgYW54IGluZGV4IHBsb3QsIGNvbW1lbnQgPSAiIn0KYW54X2luZGV4X2Rlc2NyaXB0aXZlcyRwbG90cwpgYGAKCiMjIyMgRGVzY3JpcHRpdmVzCgpgYGB7ciBhbnggaW5kZXggcmVzdWx0cywgY29tbWVudCA9ICIifQphbnhfaW5kZXhfZGVzY3JpcHRpdmVzJGRlc2NyaXB0aXZlcwkKYGBgCgojIFBhdGggYW5hbHlzaXMgd2l0aCBhIHNpbXBsaWZpZWQgbW9kZWwKCiMjIE1vZGVyYXRlZCBtZWRpYXRpb24gbW9kZWwgZGlhZ3JhbXMgYW5kIHByZS1wcm9jZXNzaW5nCgpUbyBleHBsb3JlIG91ciBoeXBvdGhlc2l6ZWQgcGF0aHdheSAoc2VlIEgxMykgYmV0d2VlbiBzb2NpYWwgbWVkaWEgZXhwb3N1cmUgYW5kIGRlcHJlc3Npb24sIHBhcnRpYWxseSBtZWRpYXRlZCBieSBDb3ZpZC0xOS1yZWxhdGVkIGNvbmNlcm5zIGFuZCBtb2RlcmF0ZWQgYnkgYWdlICh3aGljaCBpcyBwcmVzdW1lZCB0byBpbmZsdWVuY2UgYm90aCB0aGUgc29jaWFsIG1lZGlhIGV4cG9zdXJlIGFuZCB0aGUgZGVwcmVzc2lvbiBwYXRod2F5KSwgd2UgY29uZHVjdCBhIG1lZGlhdGlvbi1tb2RlcmF0aW9uIGFuYWx5c2lzIHVzaW5nIHRoZSBgbGF2YWFuYCBwYWNrYWdlLCBjb25jZXB0dWFsbHkgc3RydWN0dXJlZCBhcyBhIFtIYXllcyBtb2RlbCBuci4gNzYuXShodHRwczovL29zZi5pby8yOWM4cC9kb3dubG9hZCkKCmBgYHtyIEhheWVzIG1vZGVsIDc2IHByZS1wcm9jZXNzaW5nfQojIEJlZm9yZSBydW5uaW5nIHRoZSBtb2RlbCwgd2UgbmVlZCB0byB0cmFuc2Zvcm0gdGhlIHNvY2lhbCBtZWRpYSBzdHJpbmcgCiMgZHVtbXkgKHllcy9ubykgYmFjayB0byBpdHMgbnVtZXJpYyBmb3JtLCB3aXRoIHNpbWlsYXIgb3BlcmF0aW9uIGZvciBnZW5kZXIuCgpsZXZlbHMoZGF0YSRxMThfMDJfc29jX21lZGlhKSA8LSBsaXN0KCIxIiA9ICJ5ZXMiLCAiMCIgPSAibm8iKQpsZXZlbHMoZGF0YSRxMDFfZ2VuZGVyKSA8LSBsaXN0KCIwIiA9ICJmZW1hbGUiLCAiMSIgPSAibWFsZSIpCmRhdGEkcTAxX2dlbmRlciA8LSBhcy5udW1lcmljKGFzLmNoYXJhY3RlcihkYXRhJHEwMV9nZW5kZXIpKQpkYXRhJHExOF8wMl9zb2NfbWVkaWEgPC0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoZGF0YSRxMThfMDJfc29jX21lZGlhKSkKCiMgQ2VudGVyaW5nIGNvbnRpbnVvdXMgdmFyaWFibGVzIHdpdGggc2NhbGluZwpkYXRhX3NlbSA8LSBkYXRhICU+JSAKICAgICAgICBmaWx0ZXIoIWlzLm5hKGNvbmNlcm5faW5kZXgpKSAlPiUgCiAgICAgICAgbXV0YXRlKGNvbmNlcm5faW5kZXguYyA9IHNjYWxlKGNvbmNlcm5faW5kZXgsIHNjYWxlID0gVFJVRSksCiAgICAgICAgICAgICAgIFBIUTguYyA9IHNjYWxlKFBIUThfdCwgc2NhbGUgPSBUUlVFKSwKICAgICAgICAgICAgICAgcTAyX2FnZS5jID0gc2NhbGUocTAyX2FnZSwgc2NhbGUgPSBUUlVFKSkKCiMgTGFiZWxzIGZvciBkaWFncmFtcwpsYWJlbHNfSDc2IDwtIGxpc3QoWCA9ICJTb2NpYWwgTWVkaWEiLCAKICAgICAgICAgICAgICAgICAgIE0gPSAiQ29uY2VybiIsIAogICAgICAgICAgICAgICAgICAgWSA9ICJEZXByZXNzaW9uIiwgCiAgICAgICAgICAgICAgICAgICBXID0gIkFnZSIsIAogICAgICAgICAgICAgICAgICAgWiA9ICJHZW5kZXIiKQpgYGAKCiMjIyBQYXRoIGFuYWx5c2lzIG1vZGVsIHN0cnVjdHVyZSB7LnRhYnNldCAudGFic2V0LXBpbGxzfQoKIyMjIyBDb25jZXB0dWFsIGRpYWdyYW0KCmBgYHtyIGZpZy5oZWlnaHQ9NywgZmlnLndpZHRoPTl9CnBtYWNyb01vZGVsKDc2LAogICAgICAgICAgICBsYWJlbHMgPSBsYWJlbHNfSDc2LAogICAgICAgICAgICB4bWFyZ2luID0gMCwKICAgICAgICAgICAgcmFkeSA9IDAuMDQ3LAogICAgICAgICAgICByYWR4ID0gMC4wOSwKICAgICAgICAgICAgeWxpbSA9IGMoMC4xNSwgMC44KSkKYGBgCgojIyMjIFN0YXRpc3RpY2FsIGRpYWdyYW0gd2l0aCBwYXRoIG5hbWVzCgpgYGB7ciBmaWcuaGVpZ2h0PTcsIGZpZy53aWR0aD05fQpzdGF0aXN0aWNhbERpYWdyYW0oNzYsCiAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBsYWJlbHNfSDc2LAogICAgICAgICAgICAgICAgICAgd2hhdExhYmVsID0gIm5hbWUiLAogICAgICAgICAgICAgICAgICAgeG1hcmdpbiA9IDAuMDEsCiAgICAgICAgICAgICAgICAgICByYWR5ID0gMC4wMywKICAgICAgICAgICAgICAgICAgIHJhZHggPSAwLjExLAogICAgICAgICAgICAgICAgICAgeWxpbSA9IGMoMC4wNiwgMC45NSksCiAgICAgICAgICAgICAgICAgICB4bGltID0gYygwLjAxLCAxKSkKYGBgCgojIyBNb2RlcmF0ZWQgbWVkaWF0aW9uIG1vZGVsIHNwZWNpZmljYXRpb24gYW5kIHJlc3VsdHMKCkluIHRoZSBzZWNvbmQgc3RlcCwgd2Ugc3BlY2lmeSB0aGUga2V5IHBhdGh3YXlzIGFuZCBydW4gdGhlIGFuYWx5c2lzLCB3aGlsZSBib290c3RyYXBwaW5nIHRoZSBjb25maWRlbmNlIGludGVydmFscy4KCmBgYHtyIEhheWVzIG1vZGVsIDc2LCB3YXJuaW5nPUZBTFNFLCBjb21tZW50ID0gIiJ9CiMgTWVkaWF0aW9uLW1vZGVyYXRpb24gYW5hbHlzaXMgKHBhdGggYW5hbHlzaXMgZnJhbWV3b3JrLCBTRU0pIHVzaW5nIGxhdmFhbiBwYWNrYWdlLgoKIyBGaXJzdCwgd2Ugc3BlY2lmeSB0aGUgbW9kZWwgcGF0aHdheXMKc3BlY19tb2QgPC0gIgojIFJlZ3Jlc3Npb25zCmNvbmNlcm5faW5kZXguYyB+IGExKnExOF8wMl9zb2NfbWVkaWEgKyBhMipxMDJfYWdlLmMgKyBhMypxMDFfZ2VuZGVyICsgYTQqcTE4XzAyX3NvY19tZWRpYTpxMDJfYWdlLmMgKyBhNSpxMThfMDJfc29jX21lZGlhOnEwMV9nZW5kZXIKClBIUTguYyB+IGMxKnExOF8wMl9zb2NfbWVkaWEgKyBjMipxMDJfYWdlLmMgKyBjMypxMDFfZ2VuZGVyICsgYzQqcTE4XzAyX3NvY19tZWRpYTpxMDJfYWdlLmMgKyBjNSpxMThfMDJfc29jX21lZGlhOnEwMV9nZW5kZXIgKyBiMSpjb25jZXJuX2luZGV4LmMgKyBiMipjb25jZXJuX2luZGV4LmM6cTAyX2FnZS5jICsgYjMqY29uY2Vybl9pbmRleC5jOnEwMV9nZW5kZXIKCiNNZWFuIGFuZCB2YXJpYW5jZSBvZiBhZ2UgYW5kIGdlbmRlciBtb2RlcmF0b3JzCnEwMl9hZ2UuYyB+IHEwMl9hZ2UuYy5tZWFuKjEKcTAyX2FnZS5jIH5+IHEwMl9hZ2UuYy52YXIqcTAyX2FnZS5jCnEwMV9nZW5kZXIgfiBxMDFfZ2VuZGVyLm1lYW4qMQpxMDFfZ2VuZGVyIH5+IHEwMV9nZW5kZXIudmFyKnEwMV9nZW5kZXIKCiMgRWZmZWN0IHNwZWNpZmljYXRpb25zClhvbk0gOj0gYTEgKyBhNCpxMDJfYWdlLmMubWVhbiArIGE1KnEwMV9nZW5kZXIubWVhbgpNb25ZIDo9IGIxICsgYjIqcTAyX2FnZS5jLm1lYW4gKyBiMypxMDFfZ2VuZGVyLm1lYW4KaW5kaXJlY3QgOj0gKGExICsgYTQqcTAyX2FnZS5jLm1lYW4gKyBhNSpxMDFfZ2VuZGVyLm1lYW4pKihiMSArIGIyKnEwMl9hZ2UuYy5tZWFuICsgYjMqcTAxX2dlbmRlci5tZWFuKQpkaXJlY3QgOj0gYzEgKyBjNCpxMDJfYWdlLmMubWVhbiArIGM1KnEwMV9nZW5kZXIubWVhbgp0b3RhbCA6PSBkaXJlY3QgKyBpbmRpcmVjdApwcm9wLm1lZGlhdGVkIDo9IGluZGlyZWN0IC8gdG90YWwKCiMgQ29tcG9uZW50IGVmZmVjdHMgY29uZGl0aW9uYWwgb24gbW9kZXJhdG9ycyAoWCA9IFNvY2lhbCBNZWRpYSwgTSA9IENvbmNlcm4sIFkgPSBEZXByZXNzaW9uLCBXID0gQWdlLCBaID0gR2VuZGVyKQpYb25NLm1lYW4ubWFsZSA6PSBhMSArIGE0KnEwMl9hZ2UuYy5tZWFuICsgYTUqMQpYb25NLm1lYW4uZmVtYWxlIDo9IGExICsgYTQqcTAyX2FnZS5jLm1lYW4gKyBhNSowCgpYb25NLmJsdy5tYWxlIDo9IGExICsgYTQqKHEwMl9hZ2UuYy5tZWFuIC0gc3FydChxMDJfYWdlLmMudmFyKSkgKyBhNSoxClhvbk0uYmx3LmZlbWFsZSA6PSBhMSArIGE0KihxMDJfYWdlLmMubWVhbiAtIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqMApYb25NLmJsdy5hdmcgOj0gYTEgKyBhNCoocTAyX2FnZS5jLm1lYW4gLSBzcXJ0KHEwMl9hZ2UuYy52YXIpKSArIGE1KnEwMV9nZW5kZXIubWVhbgoKWG9uTS5hYnYubWFsZSA6PSBhMSArIGE0KihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqMQpYb25NLmFidi5mZW1hbGUgOj0gYTEgKyBhNCoocTAyX2FnZS5jLm1lYW4gKyBzcXJ0KHEwMl9hZ2UuYy52YXIpKSArIGE1KjAKWG9uTS5hYnYuYXZnIDo9IGExICsgYTQqKHEwMl9hZ2UuYy5tZWFuICsgc3FydChxMDJfYWdlLmMudmFyKSkgKyBhNSpxMDFfZ2VuZGVyLm1lYW4KCk1vblkubWVhbi5tYWxlIDo9IGIxICsgYjIqcTAyX2FnZS5jLm1lYW4gKyBiMyoxCk1vblkubWVhbi5mZW1hbGUgOj0gYjEgKyBiMipxMDJfYWdlLmMubWVhbiArIGIzKjAKCk1vblkuYmx3Lm1hbGUgOj0gYjEgKyBiMioocTAyX2FnZS5jLm1lYW4gLSBzcXJ0KHEwMl9hZ2UuYy52YXIpKSArIGIzKjEKTW9uWS5ibHcuZmVtYWxlIDo9IGIxICsgYjIqKHEwMl9hZ2UuYy5tZWFuIC0gc3FydChxMDJfYWdlLmMudmFyKSkgKyBiMyowCk1vblkuYmx3LmF2ZyA6PSBiMSArIGIyKihxMDJfYWdlLmMubWVhbiAtIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYjMqcTAxX2dlbmRlci5tZWFuCgpNb25ZLmFidi5tYWxlIDo9IGIxICsgYjIqKHEwMl9hZ2UuYy5tZWFuICsgc3FydChxMDJfYWdlLmMudmFyKSkgKyBiMyoxCk1vblkuYWJ2LmZlbWFsZSA6PSBiMSArIGIyKihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYjMqMApNb25ZLmFidi5hdmcgOj0gYjEgKyBiMioocTAyX2FnZS5jLm1lYW4gKyBzcXJ0KHEwMl9hZ2UuYy52YXIpKSArIGIzKnEwMV9nZW5kZXIubWVhbgoKIyBJbmRpcmVjdCBlZmZlY3RzIGNvbmRpdGlvbmFsIG9uIG1vZGVyYXRvcnMKaW5kaXJlY3QubWVhbi5tYWxlIDo9IChhMSArIGE0KnEwMl9hZ2UuYy5tZWFuICsgYTUqMSkqKGIxICsgYjIqcTAyX2FnZS5jLm1lYW4gKyBiMyoxKQppbmRpcmVjdC5tZWFuLmZlbWFsZSA6PSAoYTEgKyBhNCpxMDJfYWdlLmMubWVhbiArIGE1KjApKihiMSArIGIyKnEwMl9hZ2UuYy5tZWFuICsgYjMqMCkKCmluZGlyZWN0LmJsdy5tYWxlIDo9IChhMSArIGE0KihxMDJfYWdlLmMubWVhbiAtIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqMSkqKGIxICsgYjIqKHEwMl9hZ2UuYy5tZWFuIC0gc3FydChxMDJfYWdlLmMudmFyKSkgKyBiMyoxKQppbmRpcmVjdC5ibHcuZmVtYWxlIDo9IChhMSArIGE0KihxMDJfYWdlLmMubWVhbiAtIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqMCkqKGIxICsgYjIqKHEwMl9hZ2UuYy5tZWFuIC0gc3FydChxMDJfYWdlLmMudmFyKSkgKyBiMyowKQppbmRpcmVjdC5ibHcuYXZnIDo9IChhMSArIGE0KihxMDJfYWdlLmMubWVhbiAtIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqcTAxX2dlbmRlci5tZWFuKSooYjEgKyBiMioocTAyX2FnZS5jLm1lYW4gLSBzcXJ0KHEwMl9hZ2UuYy52YXIpKSArIGIzKnEwMV9nZW5kZXIubWVhbikKCmluZGlyZWN0LmFidi5tYWxlIDo9IChhMSArIGE0KihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqMSkqKGIxICsgYjIqKHEwMl9hZ2UuYy5tZWFuICsgc3FydChxMDJfYWdlLmMudmFyKSkgKyBiMyoxKQppbmRpcmVjdC5hYnYuZmVtYWxlIDo9IChhMSArIGE0KihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqMCkqKGIxICsgYjIqKHEwMl9hZ2UuYy5tZWFuICsgc3FydChxMDJfYWdlLmMudmFyKSkgKyBiMyowKQppbmRpcmVjdC5hYnYuYXZnIDo9IChhMSArIGE0KihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqcTAxX2dlbmRlci5tZWFuKSooYjEgKyBiMioocTAyX2FnZS5jLm1lYW4gKyBzcXJ0KHEwMl9hZ2UuYy52YXIpKSArIGIzKnEwMV9nZW5kZXIubWVhbikKCiMgRGlyZWN0IGVmZmVjdHMgY29uZGl0aW9uYWwgb24gbW9kZXJhdG9ycwpkaXJlY3QubWVhbi5tYWxlIDo9IGMxICsgYzQqcTAyX2FnZS5jLm1lYW4gKyBjNSoxCmRpcmVjdC5tZWFuLmZlbWFsZSA6PSBjMSArIGM0KnEwMl9hZ2UuYy5tZWFuICsgYzUqMAoKZGlyZWN0LmJsdy5tYWxlIDo9IGMxICsgYzQqKHEwMl9hZ2UuYy5tZWFuIC0gc3FydChxMDJfYWdlLmMudmFyKSkgKyBjNSoxCmRpcmVjdC5ibHcuZmVtYWxlIDo9IGMxICsgYzQqKHEwMl9hZ2UuYy5tZWFuIC0gc3FydChxMDJfYWdlLmMudmFyKSkgKyBjNSowCmRpcmVjdC5ibHcuYXZnIDo9IGMxICsgYzQqKHEwMl9hZ2UuYy5tZWFuIC0gc3FydChxMDJfYWdlLmMudmFyKSkgKyBjNSpxMDFfZ2VuZGVyLm1lYW4KCmRpcmVjdC5hYnYubWFsZSA6PSBjMSArIGM0KihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYzUqMQpkaXJlY3QuYWJ2LmZlbWFsZSA6PSBjMSArIGM0KihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYzUqMApkaXJlY3QuYWJ2LmF2ZyA6PSBjMSArIGM0KihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYzUqcTAxX2dlbmRlci5tZWFuCgojIFRvdGFsIGVmZmVjdHMgY29uZGl0aW9uYWwgb24gbW9kZXJhdG9ycwp0b3RhbC5tZWFuLm1hbGUgOj0gZGlyZWN0Lm1lYW4ubWFsZSArIGluZGlyZWN0Lm1lYW4ubWFsZQp0b3RhbC5tZWFuLmZlbWFsZSA6PSBkaXJlY3QubWVhbi5mZW1hbGUgKyBpbmRpcmVjdC5tZWFuLmZlbWFsZQoKdG90YWwuYmx3Lm1hbGUgOj0gZGlyZWN0LmJsdy5tYWxlICsgaW5kaXJlY3QuYmx3Lm1hbGUKdG90YWwuYmx3LmZlbWFsZSA6PSBkaXJlY3QuYmx3LmZlbWFsZSArIGluZGlyZWN0LmJsdy5mZW1hbGUKdG90YWwuYmx3LmF2ZyA6PSBkaXJlY3QuYmx3LmF2ZyArIGluZGlyZWN0LmJsdy5hdmcKCnRvdGFsLmFidi5tYWxlIDo9IGRpcmVjdC5hYnYubWFsZSArIGluZGlyZWN0LmFidi5tYWxlCnRvdGFsLmFidi5mZW1hbGUgOj0gZGlyZWN0LmFidi5mZW1hbGUgKyBpbmRpcmVjdC5hYnYuZmVtYWxlCnRvdGFsLmFidi5hdmcgOj0gZGlyZWN0LmFidi5hdmcgKyBpbmRpcmVjdC5hYnYuYXZnCgojIFByb3BvcnRpb24gbWVkaWF0ZWQgY29uZGl0aW9uYWwgb24gbW9kZXJhdG9ycwpwcm9wLm1lZC5tZWFuLm1hbGUgOj0gaW5kaXJlY3QubWVhbi5tYWxlIC8gdG90YWwubWVhbi5tYWxlCnByb3AubWVkLm1lYW4uZmVtYWxlIDo9IGluZGlyZWN0Lm1lYW4uZmVtYWxlIC8gdG90YWwubWVhbi5mZW1hbGUKCnByb3AubWVkLmJsdy5tYWxlIDo9IGluZGlyZWN0LmJsdy5tYWxlIC8gdG90YWwuYmx3Lm1hbGUKcHJvcC5tZWQuYmx3LmZlbWFsZSA6PSBpbmRpcmVjdC5ibHcuZmVtYWxlIC8gdG90YWwuYmx3LmZlbWFsZQpwcm9wLm1lZC5ibHcuYXZnIDo9IGluZGlyZWN0LmJsdy5hdmcgLyB0b3RhbC5ibHcuYXZnCgpwcm9wLm1lZC5hYnYubWFsZSA6PSBpbmRpcmVjdC5hYnYubWFsZSAvIHRvdGFsLmFidi5tYWxlCnByb3AubWVkLmFidi5mZW1hbGUgOj0gaW5kaXJlY3QuYWJ2LmZlbWFsZSAvIHRvdGFsLmFidi5tYWxlCnByb3AubWVkLmFidi5hdmcgOj0gaW5kaXJlY3QuYWJ2LmF2ZyAvIHRvdGFsLmFidi5hdmciCgojIEZvciByZXByb2R1Y2liaWxpdHkgb2YgcmVzdWx0cyAodXNpbmcgYm9vdHN0cmFwKQpzZXQuc2VlZCgyMDIxKQoKIyBTZWNvbmRseSwgd2UgZml0L2VzdGltYXRlIHRoZSBtb2RlbCBhbmQgd2UgdXNlIGJvb3RzdHJhcCBmb3Igcm9idXN0bmVzcy4KZml0X21vZCA8LSBsYXZhYW46OnNlbShtb2RlbCA9IHNwZWNfbW9kLAogICAgICAgICAgICAgICBkYXRhID0gZGF0YV9zZW0sCiAgICAgICAgICAgICAgIHNlID0gImJvb3RzdHJhcCIsCiAgICAgICAgICAgICAgIGJvb3RzdHJhcCA9IDEwMDApCgojIExhYmVscyBmb3Igc3RhdGlzdGljYWwgZGlhZ3JhbXMKbGFiZWxzX3N0YXRzX0g3NiA8LSBsaXN0KFggPSAicTE4XzAyX3NvY19tZWRpYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBNID0gImNvbmNlcm5faW5kZXguYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBZID0gIlBIUTguYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBXID0gInEwMl9hZ2UuYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBaID0gInEwMV9nZW5kZXIiKQpgYGAKCiMjIyBQYXRoIGFuYWx5c2lzIG1vZGVsIHN1bW1hcnksIGVzdGltYXRlcyBhbmQgc3RhdGlzdGljYWwgZGlhZ3JhbSB7LnRhYnNldCAudGFic2V0LXBpbGxzfQoKIyMjIyBEaWFncmFtIHdpdGggdW5zdGFuZGFyZGl6ZWQgY29lZmZpY2llbnRzCgpgYGB7ciBmaWcuaGVpZ2h0PTcsIGZpZy53aWR0aD05fQpzdGF0aXN0aWNhbERpYWdyYW0oNzYsCiAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBsYWJlbHNfc3RhdHNfSDc2LAogICAgICAgICAgICAgICAgICAgZml0ID0gZml0X21vZCwKICAgICAgICAgICAgICAgICAgIHdoYXRMYWJlbCA9ICJlc3QiLAogICAgICAgICAgICAgICAgICAgeG1hcmdpbiA9IDAuMDEsCiAgICAgICAgICAgICAgICAgICByYWR5ID0gMC4wMywKICAgICAgICAgICAgICAgICAgIHJhZHggPSAwLjE1OCwKICAgICAgICAgICAgICAgICAgIHlsaW0gPSBjKDAuMDYsIDAuOTUpLAogICAgICAgICAgICAgICAgICAgeGxpbSA9IGMoMC4wMSwgMSkpCmBgYAoKIyMjIyBEaWFncmFtIHdpdGggc3RhbmRhcmRpemVkIGNvZWZmaWNpZW50cwoKYGBge3IgZmlnLmhlaWdodD03LCBmaWcud2lkdGg9OX0Kc3RhdGlzdGljYWxEaWFncmFtKDc2LAogICAgICAgICAgICAgICAgICAgbGFiZWxzID0gbGFiZWxzX3N0YXRzX0g3NiwKICAgICAgICAgICAgICAgICAgIGZpdCA9IGZpdF9tb2QsCiAgICAgICAgICAgICAgICAgICB3aGF0TGFiZWwgPSAic3RkIiwKICAgICAgICAgICAgICAgICAgIHhtYXJnaW4gPSAwLjAxLAogICAgICAgICAgICAgICAgICAgcmFkeSA9IDAuMDMsCiAgICAgICAgICAgICAgICAgICByYWR4ID0gMC4xNTgsCiAgICAgICAgICAgICAgICAgICB5bGltID0gYygwLjA2LCAwLjk1KSwKICAgICAgICAgICAgICAgICAgIHhsaW0gPSBjKDAuMDEsIDEpKQpgYGAKCiMjIyMgRGV0YWlsZWQgbW9kZWwgc3VtbWFyeQoKYGBge3IsICBjb21tZW50ID0gIiJ9CmxhdmFhbjo6c3VtbWFyeShmaXRfbW9kLCAKICAgICAgICAgICAgICAgIHJzcXVhcmUgPSBUUlVFLCAKICAgICAgICAgICAgICAgIGNpID0gVFJVRSwKICAgICAgICAgICAgICAgIGZpdC5tZWFzdXJlcyA9IFRSVUUsCiAgICAgICAgICAgICAgICBzdGFuZGFyZGl6ZSA9IFRSVUUpCmBgYAoKIyMjIyBUYWJsZSBvZiBtb2RlbCBlc3RpbWF0ZXMKCmBgYHtyfQplc3RpbWF0ZXMgPC0gcGFyYW1ldGVyRXN0aW1hdGVzKGZpdF9tb2QsIHN0YW5kYXJkaXplZCA9IFRSVUUpICU+JSAKICAgICAgICAgICAgICAgICAgICBmaWx0ZXIob3AgPT0gIn4iKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1jKHN0ZC5ub3gpKQoKcF9hZGogPC0gcC5hZGp1c3QoZXN0aW1hdGVzJHB2YWx1ZSwgbWV0aG9kID0gImhvbG0iKQoKZXN0aW1hdGVzIDwtIGNiaW5kKGVzdGltYXRlcywgcF9hZGopCgprYWJsZUV4dHJhOjprYmwoZXN0aW1hdGVzKSAlPiUKa2FibGVFeHRyYTo6a2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRkFMU0UsIGxpZ2h0YWJsZV9vcHRpb25zID0gYygic3RyaXBlZCIpKSAlPiUKICAgICAgICAgICAgICAgICAgICBrYWJsZUV4dHJhOjpyb3dfc3BlYyh3aGljaChlc3RpbWF0ZXMkcF9hZGogPCAwLjA1KSwgYm9sZCA9IFRSVUUpCmBgYAoKIyMjIyBUYWJsZSBvZiBkZWZpbmVkIHBhcmFtZXRlcnMKCmBgYHtyfQpwYXJhbWV0ZXJzIDwtIHBhcmFtZXRlckVzdGltYXRlcyhmaXRfbW9kLCBzdGFuZGFyZGl6ZWQgPSBUUlVFKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKG9wID09ICI6PSIpICU+JSAKICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLWMob3AsIGxocywgcmhzLCBzdGQubm94KSkKCnBfYWRqIDwtIHAuYWRqdXN0KHBhcmFtZXRlcnMkcHZhbHVlLCBtZXRob2QgPSAiaG9sbSIpCgpwYXJhbWV0ZXJzIDwtIGNiaW5kKHBhcmFtZXRlcnMsIHBfYWRqKQoKa2FibGVFeHRyYTo6a2JsKHBhcmFtZXRlcnMpICU+JQprYWJsZUV4dHJhOjprYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGQUxTRSwgbGlnaHRhYmxlX29wdGlvbnMgPSBjKCJzdHJpcGVkIikpICU+JQogICAgICAgICAgICAgICAgICAgIGthYmxlRXh0cmE6OnJvd19zcGVjKHdoaWNoKHBhcmFtZXRlcnMkcF9hZGogPCAwLjA1KSwgYm9sZCA9IFRSVUUpCmBgYAoKIyBWaXN1YWxpemluZyB0aGUgcXVhbGl0YXRpdmUgcmVzcG9uc2VzIHVzaW5nIFdvcmQgQ2xvdWRzCgpQYXJ0IG9mIHRoZSBzdXJ2ZXksIGBxNTBfY29tbWVudGAsIHdhcyBkZWRpY2F0ZWQgdG8gdGhlIGNvbW1lbnRzIG9mIHRoZSByZXNwb25kZW50cyBvbiB0aGVpciBzaXR1YXRpb24uIFRvIHZpc3VhbGl6ZSB0aGlzIHRleHR1YWwgZGF0YSwgd2UgdXNlIHR3byBwYWlycyBvZiB0d28gd29yZCBjbG91ZHMuIFVuZm9ydHVuYXRlbHksIHRoaXMgc3VydmV5IGl0ZW0gd2FzIHVzZWQgb25seSBpbiB0aGUgQ3plY2ggdmVyc2lvbiBvZiB0aGUgc3VydmV5LgoKIyMgV29yZCBDbG91ZHMgb2YgdG9rZW5zIGFuZCBsZW1tYQoKRmlyc3QgV29yZCBDbG91ZCBwYWlyIHZpc3VhbGl6ZXMgdGhlIG1vc3QgY29tbW9uIHRva2VucyBhbmQgbGVtbWEgKHNpemUgYW5kIGNvbG9yIHJlcHJlc2VudHMgZnJlcXVlbmN5IG9mIHRoZSB3b3JkKS4KCmBgYHtyIFdvcmQgQ2xvdWQgYWxsIHRva2VucywgbWVzc2FnZT1GQUxTRX0KIyBSZW1vdmUgc3RvcCB3b3JkcyAtIGZpcnN0LCB3ZSBsb2FkIHRoZSBwdWJsaWMgc3RvcCB3b3JkIGxpc3QKc3RvcF93b3Jkc19jeiA8LSByZWFkX2NzdigKICAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3N0b3B3b3Jkcy1pc28vc3RvcHdvcmRzLWNzL21hc3Rlci9zdG9wd29yZHMtY3MudHh0IiwgCiAgY29sX25hbWVzID0gIndvcmQiKQogICAKIyBTaG91bGQgdGhlIGFib3ZlIGxpbmsgYmVjb21lIG9ic29sZXRlLCBhbHRlcm5hdGl2ZSBzb3VyY2UgY2FuIGJlIHJlYWNoZWQgCiMgIHVzaW5nICJzdG9wd29yZHMiIGxpYnJhcnk6CiMgIHN0b3Bfd29yZHNfY3ogPC0gYXNfdGliYmxlX2NvbChzdG9wd29yZHM6OnN0b3B3b3JkcygiY3MiLCAKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9ICJzdG9wd29yZHMtaXNvIiksIAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uX25hbWUgPSAid29yZCIpCgojIFJlc2hhcGUgdGhlIGRhdGEgZnJhbWUgaW50byBvbmUgY29sdW1uIGNhbGxlZCAid29yZCIKdGlkeV9kYXQgPC0gZ2F0aGVyKGRwbHlyOjphc190aWJibGUoZGF0YSRxNTBfY29tbWVudCksIGtleSwgd29yZCkgJT4lIAogICAgICAgICAgICBkcGx5cjo6c2VsZWN0KHdvcmQpCgojIFNURVAgMTogVG9rZW5pemF0aW9uIG9mIHRoZSBxNTAgcmVzcG9uc2VzCgojIFRva2VuaXplIC0gb25lIHdvcmQgcGVyIHJvdyBvZiBhIGRhdGFmcmFtZS90aWJibGUKdG9rZW5zIDwtIHRpZHlfZGF0ICU+JQogICAgICAgICAgdW5uZXN0X3Rva2Vucyh3b3JkLCB3b3JkKSAlPiUKICAgICAgICAgIGRwbHlyOjpjb3VudCh3b3JkLCBzb3J0ID0gVFJVRSkgJT4lCiAgICAgICAgICB1bmdyb3VwKCkKICAgICAgICAgICAgICAgICAgICAgICAKIyBSZW1vdmluZyBzdG9wIHdvcmRzIGJ5IHVzaW5nIGFudGlfam9pbigpIGFwcGxpZWQgb24gdGhlIHN0b3Agd29yZHMgbGlzdAp0b2tlbnNfY2xlYW4gPC0gdG9rZW5zICU+JQogICAgICAgICAgICAgICAgYW50aV9qb2luKHN0b3Bfd29yZHNfY3opCgojIE5leHQsIHdlIHJlbW92ZSBudW1iZXJzIChvcHRpb25hbCBzdGVwKQpudW1zIDwtIHRva2Vuc19jbGVhbiAlPiUgCiAgICAgICAgZHBseXI6OmZpbHRlcihzdHJfZGV0ZWN0KHdvcmQsICJeWzAtOV0iKSkgJT4lIAogICAgICAgIGRwbHlyOjpzZWxlY3Qod29yZCkgJT4lIAogICAgICAgIHVuaXF1ZSgpCgp0b2tlbnNfY2xlYW4gPC0gdG9rZW5zX2NsZWFuICU+JSAKICAgICAgICAgICAgICAgIGFudGlfam9pbihudW1zLCBieSA9ICJ3b3JkIikKCiMgIFdlIGNhbiBhbHNvIHJlbW92ZSB1bmlxdWUgc3RvcCB3b3JkcyB0aGF0IGFyZSBzdGlsbCBwcmVzZW50IChvcHRpb25hbCBzdGVwKQp1bmlfc3cgPC0gZGF0YS5mcmFtZSh3b3JkID0gYygibmFwxZkiKSkKCnRva2Vuc19jbGVhbiA8LSB0b2tlbnNfY2xlYW4gJT4lIAogICAgICAgICAgICAgICAgYW50aV9qb2luKHVuaV9zdywgYnkgPSAid29yZCIpCgojIERlZmluZSBhIGNvbG9yIHBhbGV0dGUgZm9yIHRoZSBXb3JkIENsb3VkCnBhbGV0dGUgPC0gYnJld2VyLnBhbCg4LCAiRGFyazIiKQoKIyBTVEVQIDI6IExlbW1hdGl6YXRpb24gb2YgdG9rZW5zLCB1c2luZyB1ZHBpcGUgcGFja2FnZQoKIyBDcmVhdGlvbiBvZiB1bmNvdW50ZWQgdG9rZW5zIHRhYmxlCnRva2Vuc191bmNvdW50ZWQgPC0gdGlkeV9kYXQgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5uZXN0X3Rva2Vucyh3b3JkLCB3b3JkKQoKIyBGaXR0aW5nIHRoZSB1ZHBpcGUgbW9kZWwgd2l0aCBkb3dubG9hZGVkIEN6ZWNoIG1vZGVsCgp1ZHBpcGVfdG9rZW5zX2xlbW1hIDwtIHVkcGlwZSh4ID0gdG9rZW5zX3VuY291bnRlZCR3b3JkLCBvYmplY3QgPSAiY3plY2gtcGR0IikKCiMgRXh0cmFjdGluZyByZXN1bHRpbmcgbGVtbWEgY29sdW1uIGZyb20gdGhlIG1vZGVsLCBjb3VudGluZyBmcmVxdWVuY3kgCnRpZHlfZGF0X2xlbW1hIDwtIHVkcGlwZV90b2tlbnNfbGVtbWEgJT4lIAogICAgICAgICAgICAgICAgICBzZWxlY3QobGVtbWEpICU+JSAKICAgICAgICAgICAgICAgICAgcmVuYW1lKHdvcmQgPSBsZW1tYSkgJT4lIAogICAgICAgICAgICAgICAgICBkcGx5cjo6Y291bnQod29yZCwgc29ydCA9IFRSVUUpCgojIFJlbW92aW5nIHN0b3Agd29yZHMgYnkgdXNpbmcgYW50aV9qb2luKCkgYXBwbGllZCBvbiB0aGUgc3RvcCB3b3JkcyBsaXN0CnRva2Vuc19jbGVhbl9sZW1tYSA8LSB0aWR5X2RhdF9sZW1tYSAlPiUKICAgICAgICAgICAgICAgICAgICAgIGFudGlfam9pbihzdG9wX3dvcmRzX2N6KQoKIyBOZXh0LCB3ZSByZW1vdmUgbnVtYmVycyAob3B0aW9uYWwgc3RlcCkKbnVtc19sZW1tYSA8LSB0b2tlbnNfY2xlYW5fbGVtbWEgJT4lIAogICAgICAgICAgICAgIGRwbHlyOjpmaWx0ZXIoc3RyX2RldGVjdCh3b3JkLCAiXlswLTldIikpICU+JSAKICAgICAgICAgICAgICBkcGx5cjo6c2VsZWN0KHdvcmQpICU+JSAKICAgICAgICAgICAgICB1bmlxdWUoKQoKdG9rZW5zX2NsZWFuX2xlbW1hIDwtIHRva2Vuc19jbGVhbl9sZW1tYSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICBhbnRpX2pvaW4obnVtc19sZW1tYSwgYnkgPSAid29yZCIpCgojICBXZSBjYW4gYWxzbyByZW1vdmUgdW5pcXVlIHN0b3Agd29yZHMgdGhhdCBhcmUgc3RpbGwgcHJlc2VudCAob3B0aW9uYWwgc3RlcCkKdW5pcV9sZW1tYSA8LSB0aWJibGUod29yZCA9IGMoTkEpKQp0b2tlbnNfY2xlYW5fbGVtbWEgPC0gdG9rZW5zX2NsZWFuX2xlbW1hICU+JSAKICAgICAgICAgICAgICAgICAgICAgIGFudGlfam9pbih1bmlxX2xlbW1hLCBieSA9ICJ3b3JkIikKCmBgYAoKIyMjIFdvcmQgQ2xvdWRzIHRva2VucyAmIGxlbW1hIHsudGFic2V0IC50YWJzZXQtcGlsbHN9CgojIyMjIFdvcmQgQ2xvdWQgb2YgdG9rZW5zCgpgYGB7ciBmaWcuaGVpZ2h0PTksIGZpZy53aWR0aD05fQpzZXQuc2VlZCgyMDIxKQp0b2tlbnNfY2xlYW4gJT4lIHdpdGgod29yZGNsb3VkKHdvcmQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbS5vcmRlciA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gYyg3LC41KSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLmZyZXEgPSAxLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgud29yZHMgPSAxMDAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IHBhbGV0dGUpKQpgYGAKCiMjIyMgV29yZCBDbG91ZCBvZiBsZW1tYQoKYGBge3IgZmlnLmhlaWdodD05LCBmaWcud2lkdGg9OX0Kc2V0LnNlZWQoMjAyMSkKdG9rZW5zX2NsZWFuX2xlbW1hICU+JSB3aXRoKHdvcmRjbG91ZCh3b3JkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbS5vcmRlciA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IGMoMTEsLjcpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4uZnJlcSA9IDEsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heC53b3JkcyA9IDEwMCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzID0gcGFsZXR0ZSkpCmBgYAoKIyMgV29yZCBDbG91ZHMgd2l0aCBhcHBsaWVkIHNlbnRpbWVudCBhbmFseXNpcwoKU2Vjb25kIFdvcmQgQ2xvdWQgcGFpciB1c2VzIHNlbnRpbWVudCBhbmFseXNpcyB0ZWNobmlxdWUgdG8gY3JlYXRlIHR3byBkaXN0aW5jdCB3b3JkIGNsb3VkcyAodXNpbmcgb25seSBsZW1tYSwgbm90IHRva2VucyksIG9uZSB2aXN1YWxpemVzIG9ubHkgd29yZHMgd2l0aCBwb3NpdGl2ZSBlbW90aW9uYWwgc2VudGltZW50LCB3aGlsZSB0aGUgc2Vjb25kIG9ubHkgd29yZHMgd2l0aCBuZWdhdGl2ZSBzZW50aW1lbnQuCgpgYGB7ciBXb3JkIENsb3VkIHBvc2l0aXZlIHZhbGVuY3ksIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgRmlyc3QsIHdlIGxvYWQgQ3plY2ggU3ViamVjdGl2aXR5IExleGljb24gZnJvbSDDmkZBTCBNRkYsIHdoaWNoIGFzc2Vzc2VzIAojICBzZW50aW1lbnQgZm9yIGV2ZXJ5IHdvcmQgYXMgcG9zaXRpdmUgb3IgbmVnYXRpdmUKCmxpbmRhdF9yZXBvc2l0b3J5IDwtICJodHRwczovL2xpbmRhdC5tZmYuY3VuaS5jei9yZXBvc2l0b3J5LyIKbGluZGF0X3BhdGggPC0gInhtbHVpL2JpdHN0cmVhbS9oYW5kbGUvMTE4NTgvMDAtMDk3Qy0wMDAwLTAwMjItRkY2MC1CLyIKbGluZGF0X2ZpbGVfbmFtZSA8LSAic3VibGV4XzFfMC5jc3Y/c2VxdWVuY2U9MSZpc0FsbG93ZWQ9eSIKCnNlbnRpbWVudF9jeiA8LSByZWFkX2RlbGltKHBhc3RlMChsaW5kYXRfcmVwb3NpdG9yeSwgbGluZGF0X3BhdGgsIGxpbmRhdF9maWxlX25hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiXHQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlX2RvdWJsZSA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX25hbWVzID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICB0cmltX3dzID0gVFJVRSkgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWUoIndvcmQiID0gIlgzIiwgInNlbnRpbWVudCIgPSAiWDQiKQojIFJlbW92ZSBleHRyYSBzeW1ib2xzCnNlbnRpbWVudF9jeiR3b3JkIDwtIHN0cl9yZW1vdmUoc2VudGltZW50X2N6JHdvcmQsIHBhdHRlcm4gPSAiXy4qIikKCiMgTmV4dCwgd2UgY3JlYXRlIHRpZHkgdGliYmxlIHdpdGggdG9rZW5zIGNyZWF0ZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24gCiMgIGFuZCB3ZSB1c2UgaW5uZXJfam9pbiBmdW5jdGlvbiB0byBzZXBhcmF0ZWx5IHNhdmUgb25seSAKIyAgdGhlIHRva2VucyB3aXRoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWxlbmN5CnRva2Vuc19zZW50aW1lbnRfcG9zaXRpdmUgPC0gdG9rZW5zX2NsZWFuX2xlbW1hICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lcl9qb2luKHNlbnRpbWVudF9jeiAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNlbnRpbWVudCA9PSAiUE9TIikpICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc211dGUod29yZCwgbikgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmFuZ2UoZGVzYyhuKSkKCnRva2Vuc19zZW50aW1lbnRfbmVnYXRpdmUgPC0gdG9rZW5zX2NsZWFuX2xlbW1hICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lcl9qb2luKHNlbnRpbWVudF9jeiAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNlbnRpbWVudCA9PSAiTkVHIikpICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc211dGUod29yZCwgbikgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmFuZ2UoZGVzYyhuKSkKYGBgCgojIyMgV29yZCBDbG91ZHMgc2VwYXJhdGVkIGJ5IHNlbnRpbWVudCB2YWxlbmN5IHsudGFic2V0IC50YWJzZXQtcGlsbHN9CgojIyMjIFBvc2l0aXZlIHZhbGVuY3kgd29yZHMKCmBgYHtyIGZpZy5oZWlnaHQ9OSwgZmlnLndpZHRoPTl9CnNldC5zZWVkKDIwMjEpCnRva2Vuc19zZW50aW1lbnRfcG9zaXRpdmUgJT4lIHdpdGgod29yZGNsb3VkKHdvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb20ub3JkZXIgPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gYygyLCAzLjUpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LndvcmRzID0gNDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbi5mcmVxID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzID0gcGFsZXR0ZSkpCmBgYAoKIyMjIyBOZWdhdGl2ZSB2YWxlbmN5IHdvcmRzCgpgYGB7ciBmaWcuaGVpZ2h0PTksIGZpZy53aWR0aD05fQpzZXQuc2VlZCgyMDIxKQp0b2tlbnNfc2VudGltZW50X25lZ2F0aXZlICU+JSB3aXRoKHdvcmRjbG91ZCh3b3JkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tLm9yZGVyID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IGMoMiwgMy41KSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heC53b3JkcyA9IDQ1LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLmZyZXEgPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMgPSBwYWxldHRlKSkKYGBgCgojIEJpYmxpb2dyYXBoeQo=